《第4章 串》习题解答 下载本文

第4章 串存储与基本操作的实现

n=12,num=32 Index_KMP:

n=12,num=25

4.4应用举例

【例4.2】应用BF模式匹配函数IndexBF_SS(S,T,pos)实现算法:

int Replace_S(SString &S,SString T,SString V)

该函数的功能是,将定长存储串S中的所有子串T用定长串V来替换。如果操作成功函数返回值1,否则返回值0。 算法思想

假设模式串T的长度为lt,替换串V的长度为lv,先从pos=1的位置开始查找T在S中出现的位置n,如果操作成功,则将S中第n个开始lt个字符替换为串值V,并且pos=n+lv,继续开始下一轮的查找和替换过程,直到查找失败为止。 算法实现

int Replace_S(SString &S,SString T,SString V) { int n,pos=1; int lt=Length_SS(T),lv=Length_SS(V); while(n=IndexBF_SS(S,T,pos)) { if(!Replace_SS(S,n,lt,V))return 0; pos=n+lv; } return 1; }

【例4.3】应用BF模式匹配函数IndexBF_SS(S,T,pos)实现算法:

int Replace_H(HString &S,HString T,HString V)

该函数的功能是,将堆分配存储串S中的所有子串T用堆分配存储串V来替换。如果操作成功函数返回值1,否则返回值0。

int Replace_H(HString &S,HString T, HString V) { int n,pos=1,lt=T.length,lv=V.length; while(n=IndexBF_SS(S.ch,T.ch,pos)) { if(!Replace_HS(S,n,lt,V)) return 0; pos=n+lv; } return 1; } 演示程序代码

串替换函数Replace_S()、Replace_H()的函数调用演示程序 void main () {

-.87.-

第4章 串存储与基本操作的实现

SString S1,T1,V1; HString S2,T2,V2; cout<<\《串替换函数演示程序》:\\n\ cout<<\ cout<<\ cout<<\ StrAssign_HS(S2,S1); StrAssign_HS(T2,T1); StrAssign_HS(V2,V1); if(Replace_S(S1,T1,V1)) cout<<\定长替换结果为:\\n\ else cout<<\定长替换失败!\\n\ if(Replace_H(S2,T2,V2)) cout<<\堆分配替换结果为:\\n\ else cout<<\堆分配替换失败!\\n\}(程序运行结果略)

【例4.4】编程计算定长存储串S中所含不同字符的总数以及该串中每个字符的个数。 算法思想

首先定义结构体类型:struct num{char ch;int n;};以及该类型的数组a[],其中ch表示字符串S中的不同字符,n表示字符出现的次数。再对串S中的每个字符ch,在数组a中逐个扫描,如果查找成功,相应的字符数加1,否则在a中添加一个新字符,其个数置为1。 算法实现

void ch_num() { SString S; struct num{char ch;int n;}; num a[MAXLEN]; int i=0,j,k=0; char ch; cout<<\输入一个字符串:\\n\ cin.getline(S,MAXLEN); while(ch=S[i++]) { for(j=0;j| 举报本页文档 All rights reserved Powered by 南京廖华答案网 
资料来自互联网, 有任何疑问,请联系客服:779662525☒qq.com 苏ICP备20003344号-2