编写算法,从串s 中删除所有和串 t相同的子串
void DelSubString(StringType &scrStr, StringType subStr) { int n,m,i; StringType sub; InitStr(sub); n = StrLength(scrStr); m = StrLength(subStr); i = 1; while(i <= n){ StrAssign(sub,SubString(scrStr,i,m));//将串C中的子串逐个提取出来与串T进行匹配 if(StrCompare(sub,subStr) == 0){//匹配相等时 InitStr(sub); Concat(sub,SubString(scrStr,1,i-1));//将匹配相等的子串的前面的子串连接到串sub后 Concat(sub,SubString(scrStr,m+i,n-(m+i)+1));//将匹配相等的子串的后面的子串连接到串sub后 StrAssign(scrStr,sub); n = StrLength(scrStr);//操作完一次之后,串scrStr已经改变,需要注意 } else{ ++i; } } }
举一反三
内容
- 0
设有两个串S和T,其中T是S的子串,求T在S中首次出现的位置的算法称为( )。 A: 求子串 B: 联接 C: 匹配 D: 串比较
- 1
假设定长顺序存储结构表示串试设计一个算法求串s和串t的一个最长公共子串,并分析你的算法的时间复杂度若要求第一个出现的最长公共子串(既它在串s和串t的最左边的位置上出现)和所有的最长公共子串,讨论你的算法能否实现。
- 2
设有两个串T和S,其中T是S的子串,则求T在S中首次出现位置的算法称为()。
- 3
设计一个算法Count(s,t),求串t在串s中出现的次数。(例如,对于s="aababababc",t="abab",这里认为t在s中仅仅出现2次,其中不考虑子串重复问题。 假设两个串均以顺序串存储。)
- 4
主串S=I like datastruture,子串t=data。子串在主串中的位置是( )。