串的三种构建方法
#include<stdio.h>
#define MaxLen 100
typedef struct SString {
char ch[MaxLen];
int Length;
}SString;
typedef struct HString {
char* ch;
int Length;
}HString;
typedef struct LString {
char ch[4];
struct LSting* next;
}LString;
串的相关操作
#include<stdio.h>
#define MaxLen 100
typedef struct SString {
char ch[MaxLen];
int Length;
}String;
void StrAssign(String& T, char chars[]){
int i = 0;
while (chars[i] != '\0') {
T.ch[i] = chars[i];
i++;
}
T.ch[i] = '\0';
T.Length = i;
}
void StrCopy(String& T, String S) {
for (int i = 0; i <= S.Length; i++) {
T.ch[i] = S.ch[i];
}
T.Length = S.Length;
}
bool StrEmpty(String S) {
return S.Length == 0;
}
int StrCompare(String S, String 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 StrLength(String S) {
return S.Length;
}
bool SubString(String& Sub, String S, int pos, int len) {
if (pos < 0) {
return false;
}
int k = 0;
for (int i = pos; i < pos + len && i < S.Length; i++) {
Sub.ch[k++] = S.ch[i];
}
Sub.ch[k] = '\0';
Sub.Length = k;
return true;
}
void Concat(String& T, String S1, String S2) {
int k = 0;
for (int i = 0; i < S1.Length; i++) {
T.ch[k++] = S1.ch[i];
}
for (int i = 0; i < S2.Length; i++) {
T.ch[k++] = S2.ch[i];
}
T.ch[k] = '\0';
T.Length = k;
}
void ClearString(String& S) {
S.Length = 0;
}
int Index(String S, String T) {
int i = 0;
int n = StrLength(S);
int m = StrLength(T);
String Sub;
while (i <= n - m) {
SubString(Sub, S, i, m);
if (StrCompare(Sub, T) == 0) {
return i;
}
else {
i++;
}
}
return -1;
}
int main() {
String S,S1,T,T1;
char chars1[] = "abcdefg";
StrAssign(S1, chars1);
printf("S1=%s,S1Len=%d\n", S1.ch, S1.Length);
char chars2[] = "hig";
StrAssign(T1, chars2);
printf("T1=%s,T1Len=%d\n", T1.ch, T1.Length);
Concat(S, S1, T1);
printf("S=%s,SLen=%d\n", S.ch, S.Length);
StrCopy(T, T1);
printf("T=%s,TL=%d\n", T.ch, T.Length);
printf("T在S的匹配位置%d\n",Index(S, T));
}