1.串的基本操作
1.1定义
typedef struct { char* ch = NULL; int length = 0; // 长度 }HString;
1.2生成串
// 生成一个串常量chars的串T bool StrAssign(HString& T, char* chars) { int i = 0; // 求char*字符串长度 for(i = 0; *(chars + i) != '\0'; i++); // printf("%d\n", i); if(T.ch != NULL) // 释放源字符串 free(T.ch); if(i == 0) { T.ch = NULL; T.length = 0; } else { if(!(T.ch = (char*)malloc(i * sizeof(char)))) return false; for(int j = 0; j < i; j++) *(T.ch + j) = *(chars + j); // 字符串复制 T.length = i; } return true; }
1.3串的长度
// 串的长度 int StrLength(HString S) { return S.length; }
1.4比较函数
// 比较函数 // S > T,返回值大于0;S = T,返回值等于0;S < T,返回值小于0 int StrCompare(HString S, HString T) { int i; for(i = 0; i < S.length && i < T.length; i++) { if(S.ch[i] != T.ch[i]) return S.ch[i] - T.ch[i]; } return S.length - T.length; }
1.5清空字符串
// 清空 int StrClear(HString& S) { if(S.ch) { free(S.ch); S.ch = NULL; } S.length = 0; return 0; }
1.6合并字符串
// T返回S1和S2连接而成的串 int Concat(HString& T, HString S1, HString S2) { if(T.ch) free(T.ch); T.length = S1.length + S2.length; if(!(T.ch = (char*)malloc((T.length) * sizeof(char)))) return 0; for(int i = 0; i < S1.length; i++) { *(T.ch + i) = *(S1.ch + i); } for(int i = 0; i < S2.length; i++) { *(T.ch + S1.length + i) = *(S2.ch + i); } return 0; }
1.7求子串
// 用Sub返回串S的第pos个字符起长度为len的字串 int StrSub(HString& Sub, HString S, int pos, int len) { if(len < 0 || pos > S.length || pos < 1 || len > S.length - pos + 1) { printf("str sub error! \n"); return -1; } if(len == 0) { Sub.ch = NULL; Sub.length = 0; } else { Sub.ch = (char*)malloc(len * sizeof(char)); for(int i = 0; i < len; i++) { *(Sub.ch + i) = *(S.ch + pos - 1 + i); } Sub.length = len; } return 0; }