标签:ring 指针 sqs false 比较 顺序 传递 qstring 相等
顺序串参数采用直接传递顺序串的方法,不同于顺序表指针。
typedef struct { char data[MAXSIZE]; int length; }SqString;
生成串
void StrAssign(SqString& s, char cstr[]) { int i; for (i = 0; cstr[i] != ‘\0‘; i++) { s.data[i] = cstr[i]; } s.length = i;
销毁串(存储空间由操作系统管理)
void DestroyStr(SqString& s) { }
串的复制
void StrCopy(SqString& s, SqString t) { for (int i = 0; i < t.length; i++) { s.data[i] = t.data[i]; } s.length = t.length; }
判断串是否相等
bool StrEqual(SqString s, SqString t) { if (s.length != t.length) return false; else { for (int i = 0; i < s.length; i++) { if (s.data[i] != t.data[i]) return false; } return true; } }
串长
int StrLength(SqString s) { return s.length; }
串的连接
SqString ConStr(SqString s, SqString t) { SqString str; int i, j; for (int i = 0; i < s.length; i++) { str.data[i] = s.data[i]; } for (int j = 0; j < t.length; j++) { str.data[j + s.length] = t.data[j]; } str.length = s.length + t.length; return str; }
求子串
SqString SubStr(SqString s, int i, int j) { SqString str; str.length = 0; if (i<=0 || i>s.length || i + j - 1 > s.length) return str; else { for (int k = i-1; k < i + j - 1; k++) { str.data[k-i+1] = s.data[k]; } str.length = j; return str; } }
子串插入
SqString InsStr(SqString s, int i, SqString t) { int j; SqString str; str.length = 0; if (i <= 0 || i > s.length) return str; else { for (j = 0; j < i - 1; j++) { str.data[j] = s.data[j]; } for (j = 0; j < t.length; j++) { str.data[j - 1 + i] = t.data[j]; } for (j = i - 1; j < s.length; j++) { str.data[j + t.length] = s.data[j]; } str.length = s.length + t.length; return str; } }
子串删除
SqString DelStr(SqString s, int i, int j) { int k; SqString str; str.length = 0; if (i <= 0 || i > s.length || i + j - 1 > s.length) return str; else { for (k = 0; k < i - 1; k++) { str.data[k] = s.data[k]; } for (k = i + j - 1; k < s.length; k++) { str.data[k-j] = s.data[k]; } str.length = s.length - j; return str; } }
子串替换
SqString RepStr(SqString s, int i, int j, SqString t) { int k; SqString str; str.length = 0; if (i <= 0 || i > s.length || i + j - 1 > s.length) return str; else { for (k = 0; k < i - 1; k++) { str.data[k] = s.data[k]; } for (k = 0; k < t.length; k++) { str.data[i - 1 + k] = t.data[k]; } for (k = i + j - 1; k < s.length; k++) { str.data[k-j+t.length] = s.data[k]; } str.length = s.length + t.length - j; return str; } }
输出串
void DispStr(SqString s) { if (s.length > 0) { for (int i = 0; i < s.length; i++) printf("%c", s.data[i]); printf("\n"); } }
按字典顺序比较两个串大小
int StrCmp(SqString s, SqString t) { int comlen; if (s.length > t.length) comlen = t.length; else comlen = s.length; for (int i = 0; i < comlen; i++) { if (s.data[i] > t.data[i]) return 1; if (s.data[i] < t.data[i]) return -1; } if (s.length > t.length) return 1; else if (s.length < t.length) return -1; else return 0; }
第一个最长连续相同字符
void LongestString(SqString s, int& Index, int& maxlen) { int i = 1; int length, start; Index = 0; maxlen = 1; while (i < s.length) { start = i - 1; length = 1; while (s.data[i] == s.data[i - 1] && i <s .length) { i++; length++; } if (length > maxlen) { maxlen = length; Index = start; } i++; } }
标签:ring 指针 sqs false 比较 顺序 传递 qstring 相等
原文地址:https://www.cnblogs.com/KIROsola/p/11355285.html