1、利用所学字符串基本运算的函数得到结果串为:s3=caabcbcaaaaaacaaaaaa。三、实验用设备仪器及材料计算机四、实验原理及接线五、实验操作步骤/ main4-1.cpp 检验bo4-1.cpp的主程序/ c1.h (程序名)#includectype.hmalloc.h / malloc()等limits.h / INT_MAX等stdio.h / EOF(=Z或F6),NULLstdlib.h / atoi()io.h / eof()math.h / floor(),ceil(),abs()process.h / exit()/ #include / cout,cin/ 函数结果
2、状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1/ #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedef int Status; / Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; / Boolean是布尔类型,其值是TRUE或FALSE/ c4-1.h 串的定长顺序存储表示#define MAXSTRLEN 30 / 用户可在255以内定义最大串长(1个字节)typ
3、edef char SStringMAXSTRLEN+1; / 0号单元存放串的长度/ bo4-1.cpp 串采用定长顺序存储结构(由c4-1.h定义)的基本操作(14个)/ SString是数组,故不需引用类型。此基本操作包括算法4.2,4.3,4.5Status StrAssign(SString &T,char *chars) / 生成一个其值等于chars的串T int i; if(strlen(chars)MAXSTRLEN) return ERROR; else T0=strlen(chars); for(i=1; iT,则返回值0;若S=T,则返回值=0;若ST,则返回值=S0&
4、i +i) if(Si!=Ti) return Si-Ti; return S0-T0;int StrLength(SString S) / 返回串的元素个数 return S0;Status ClearString(SString S)串S存在。操作结果:将S清为空串 S0=0;/ 令串长为零Status Concat(SString &T,SString S1,SString S2) / 算法4.2改 / 用T返回S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE if(S10+S20=MAXSTRLEN) / 未截断=S10; Ti=S1i;=S20; TS10+i=S2
5、i; T0=S10+S20; / 截断S2=MAXSTRLEN-S10; T0=MAXSTRLEN;Status SubString(SString &Sub,SString S,int pos,int len) / 用Sub返回串S的第pos个字符起长度为len的子串。算法4.3 if(posS0|lenS0-pos+1)=len; Subi=Spos+i-1; Sub0=len;int Index(SString S,SString T,int pos) / 返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0。 / 其中,T非空,1posStrLength(S)。算法4.
6、5 int i,j; if(1=pos&pos=S0) i=pos; j=1; while(ijT0) return i-T0; return 0;Status StrInsert(SString S,int pos,SString T) / 初始条件: 串S和T存在,1posStrLength(S)+1 / 操作结果: 在串S的第pos个字符之前插入串T。完全插入返回TRUE,部分插入返回FALSES0+1) if(S0+T0=pos; i-) Si+T0=Si; for(i=pos;pos+T0; Si=Ti-pos+1; S0=S0+T0; /部分插入 for(i=MAXSTRLEN;
7、Si=Si-T0; S0=MAXSTRLEN;Status StrDelete(SString S,int pos,int len) 串S存在,1posStrLength(S)-len+1 从串S中删除第pos个字符起长度为len的子串S0-len+1|len0) for(i=pos+len; Si-len=Si; S0-=len;Status Replace(SString S,SString T,SString V) 串S,T和V存在,T是非空串(此函数与串的存储结构无关) 用V替换主串S中出现的所有与T相等的不重叠的子串 int i=1; / 从串S的第一个字符起查找串T if(StrE
8、mpty(T) / T是空串 do i=Index(S,T,i); / 结果i为从上一个i之后找到的子串T的位置 if(i) / 串S中存在串T StrDelete(S,i,StrLength(T); / 删除该串T StrInsert(S,i,V); / 在原串T的位置插入串V i+=StrLength(V); / 在插入的串V后面继续查找串T while(i);void DestroyString() / 由于SString是定长类型,无法销毁void StrPrint(SString T) / 输出字符串T。另加 printf(%c,Ti);n);/ printf(int main()
9、char g=1; Status k; char s,cMAXSTRLEN+1; SString t,s1,s2;请输入串s1: gets(c); k=StrAssign(s1,c); if(!k)串长超过MAXSTRLEN(=%d)n,MAXSTRLEN); exit(0);串长为%d 串空否?%d(1:是 0:否)n,StrLength(s1),StrEmpty(s1); StrCopy(s2,s1);拷贝s1生成的串为: StrPrint(s2);请输入串s2: k=StrAssign(s2,c);串长超过MAXSTRLEN(%d)n i=StrCompare(s1,s2); if(i
10、s=串s1%c串s2n,s); k=Concat(t,s1,s2);串s1联接串s2得到的串t为: StrPrint(t); if(k=FALSE)串t有截断n ClearString(s1);清为空串后,串s1为: StrPrint(s1);求串t的子串,请输入子串的起始位置,子串长度: scanf(%d,%d,&i,&j); k=SubString(s2,t,i,j); if(k)子串s2为:从串t的第pos个字符起,删除len个字符,请输入pos,len: StrDelete(t,i,j);删除后的串t为: i=StrLength(s2)/2; StrInsert(s2,i,t);在串s2的第%d个字符之前插入串t后,串s2为:,i); i=Index(s2,t,1);s2的第%d个字母起和t第一次匹配n SubString(t,s2,1,1);串t为: Concat(s1,t,t);串s1为: Replace(s2,t,s1);用串s1取代串s2中和串t相同的不重叠的串后,串s2为: while(g!0)scanf(g); / 由于SString是
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1