#include<stdio.h> #define MAXSTRLEN 255 #define TRUE 1 #define FALSE 0 #define OK 1 typedef int Status; typedef unsigned char SString[MAXSTRLEN+1]; Status StrAssign(SString &T,char *chars);//串赋值,生成一个其值等于chars的串T Status StrCopy(SString &T,SString S);//串复制,由串S复制得串T int StrCompare(SString S,SString T);//串比较,若S>T,则返回值>0;若S=T,则返回值=0;若S<T,则返回值<0; int StrLength(SString S);//返回S的元素个数,称为串的长度 Status Concat(SString &T,SString S1,SString S2);//用T返回有S1和S2联接而成的新串。若未截断,则返回TRUE,否则返回FALSE Status SubString(SString &Sub,SString S,int pos,int len);//用Sub返回串S的第pos个字符起长度为len的子串 int Index(SString S,SString T,int pos);//T为非空串,若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回0 void PrintStr(SString S);//输出串的值 void PrintMenu(); int main() { SString S1,S2,S3; int i,pos,len; char chars[MAXSTRLEN]; int z=1; int cdh;//选择的菜单号 while(z) { do{ PrintMenu(); scanf("%d",&cdh); if(cdh<0||cdh>6) printf("菜单号输入错误,请重新输入! "); }while(cdh<0||cdh>6); getchar(); switch(cdh){ case 0: z=0; break; case 1://串复制 printf("串复制,把S1复制到S2--------------------- "); printf("请输入串S1的值:"); gets(chars); StrAssign(S1,chars); if(StrCopy(S2,S1)) { printf("复制成功!串S2的长度是:%d; 值是:",StrLength(S2)); PrintStr(S2); } break; case 2://串比较 printf("串比较,比较串S1和S2的大小---------------------------- "); printf("请输入串S1的值:"); gets(chars); StrAssign(S1,chars); printf("请输入串S2的值:"); gets(chars); StrAssign(S2,chars); i=StrCompare(S1,S2); if(i>0) printf("比较结果:S1大于S2。 "); else if(i==0) printf("比较结果:S1等于S2。 "); else printf("比较结果:S1小于S2。 "); break; case 3://求串长 printf("求串长------------------------------ "); printf("请输入串S1的值:"); gets(chars); StrAssign(S1,chars); printf("串长是:%d ",StrLength(S1)); break; case 4://串联接 printf("串联接------------------------------ "); printf("请输入串S1的值:"); gets(chars); StrAssign(S1,chars); printf("请输入串S2的值:"); gets(chars); StrAssign(S2,chars); if(Concat(S3,S1,S2)) printf("S2没有被截断;"); else printf("S2被截断;"); printf("联接结果: "); PrintStr(S3); break; case 5://求子串 printf("求子串-------------------------------- "); printf("请输入主串: "); gets(chars); StrAssign(S1,chars); printf("请输入起始位置pos: "); scanf("%d",&pos); printf("请输入所求子串长度len: "); scanf("%d",&len); if(SubString(S2,S1,pos,len)) { printf("求子串成功!子串是: "); PrintStr(S2); } else printf("求子串失败! "); break; case 6://求子串在主串中的位置 printf("求子串在主串中的位置----------------------------------- "); printf("请输入主串: "); gets(chars); StrAssign(S1,chars); printf("请输入子串: "); gets(chars); StrAssign(S2,chars); printf("请输入起始位置pos: "); scanf("%d",&pos); i=Index(S1,S2,pos); if(i) { printf("找到了,子串在主串第%d个字符之后第一次出现的位置是%d。 ",pos,i); } else printf("子串在主串第%d个字符之后未出现。 ",pos); break; } } return 0; } Status StrAssign(SString &T,char *chars)//串赋值,生成一个其值等于chars的串T { int i=0; while(chars[i]!='