1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #include <stdio.h> #include <string.h> #define Maxlen 255
typedef struct { char ch[Maxlen]; int length; }SString;
void InitString(SString& S) { strcpy_s(S.ch, "abcdefghijk"); S.length = 11; }
void SubString(SString S, int pos, int len) { if (pos + len - 1 > S.length) { printf("越界了"); } else { printf("从字符串%s的第%d位开始取%d位的结果为:", S.ch, pos, len); for (int i = pos - 1; i < pos - 1 + len; i++) { printf("%c", S.ch[i]); } } }
bool SubString(SString& Sub, SString S, int pos, int len) { if (pos + len - 1 > S.length) { return false; } else { for (int i = pos - 1; i < pos + len - 1; i++) { Sub.ch[i - pos] = S.ch[i]; } } return true; }
int StrCompare(SString S, SString T) { for (int 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; }
int IndexString(SString S, SString T) { int i = 0, n = S.length, m = T.length; SString Sub; while (i <= n - m) { SubString(Sub, S, i, m); if (StrCompare(Sub, T) != 0) { i += 1; } else { return i; } } return 0; }
int main() { SString S; InitString(S); SubString(S, 2, 4); return 0; }
|