串的基本操作(C++)

来源:互联网 发布:阿里云ecs扩容 编辑:程序博客网 时间:2024/06/06 10:01
#include"iostream"using namespace std;//=================串==============================/*两个串是否相等,必须是它们串的长度以及它们各个对应位置的字符都相等时,才算是相等.串的顺序存储结构的缺点是字符串的截断,截断就是超过预定义长度的串值被舍去.*///=========串的顺序存储===========/*一般T[0]存放串的大小*/const int MAXSIZE = 40;struct StringType{char Str[MAXSIZE];int length;struct StringType(int x) :length(0){};};/*输出字符串T*/bool StringVisit(const StringType *T){if (T->length==0){cout << "空串!" << endl;return false;}else{for (int i = 0; i <T->length; i++)cout << T->Str[i];cout << endl;return true;}}/*生成一个其值为chars的串T*/bool StrCreate(StringType *T, char *chars){if (strlen(chars) > MAXSIZE)return false;else{T->length = strlen(chars);for (int i = 0; i <T->length; i++)T->Str[i] = chars[i];return true;}}/* 返回串的元素个数 */int StrLength(StringType *T){return T->length;}/*串比较: 初始条件: 串S和T存在 操作结果: 若S>T,则返回值>0;若S=T,则返回值=0;若S < T,则返回值< 0 */int StrComp(const StringType *T, const StringType *S){for (int i = 0; i < T->length && i < S->length; i++){if (S->Str[i]!=T->length)return S->Str[i] - T->Str[i];}return S->length - T->length;}/* 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE */bool Contact(StringType *T, StringType *S1, StringType *S2){if (S1->length + S2->length <= MAXSIZE){for (int i = 0; i < S1->length; i++)T->Str[i] = S1->Str[i];for (int j = 0; j < S2->length; j++)T->Str[j] = S2->Str[j];T->length = S1->length + S2->length;return true;}else{for (int i = 0; i < S1->length; i++)T->Str[i] = S1->Str[i];for (int j = 0; j < MAXSIZE-S1->length; j++)T->Str[j] = S2->Str[j];T->length = MAXSIZE;return false;}}/* 用Sub返回串S的第pos个字符起长度为len的子串。 */bool SubString(StringType *T, StringType *Sub, int pos, int len){if (T->length < 0 || pos < 0 || len<0 || pos>T->length || len>T->length - pos)return false;else{Sub->length = len;for (int i = 0; i < len; i++)Sub->Str[i] = T->Str[pos + i];return true;}}//kmp模式匹配算法int main(){char *cc = "asdfchjksj";StringType *T = new StringType(0);StrCreate(T, cc);return 0;}


更新中.........

原创粉丝点击