1、1求串长:LenStr(s)。2串连接:ConcatStr(s1,s2) 。3求子串:SubStr (s,i,len)。4串比较: EqualStr (s1,s2)。5子串查找:IndexStr (s,t),找子串t在主串s中首次出现的位置也称形式匹配。6串插入:InsStr (s,t,i)。7串删除:DelStr(s,i,len)。4串的存储1定长顺序存储。2链接存储。3串的堆分配存储。 典型习题分析【例1】下面关于串的的表达中,哪一个是不正确的?A串是字符的有限序列 B空串是由空格构成的串C形式匹配是串的一种重要运算 D串既可以采用顺序存储,也可以采用链式存储分析:空串是不含任何字符的串,
2、即空串的长度是零。空格串是由空格组成的串,其长度等于空格的个数。答案为B。【例2】两个串相等的充分必要条件是( )。A两个串长度相等 B两个串有一样字符C两个串长度相等且有一样字符 D以上结论均不正确根据串相等定义,两个串是相等是指两个串的长度相等且对应字符都相等,故A、B、C均不正确,答案为D。【例3】串链式存储的优点是1 ,缺点是2 。由链式存储结点特点可以得到:1插入、删除方便。2浪费空间。注意,这里串的链式存储是指结点元素为1个字符的链串,假设结点元素字符数大于1,插入和删除同样不方便,但空间利用率可以进步。【例4】设S=abccdcdccbaa,T=dccb, 那么第 7 次匹配成功
3、。由字符串形式匹配概念,匹配过程如下:S=第一趟d 不成功第二趟d 不成功第三趟 d 不成功 S=第四趟 d 不成功 第五趟 dcc 不成功第六趟 d 不成功第七趟 dccb 成功【例5】 利用函数LenStr(s),SubStr (s,i,len)和ConcatStr(s1,s2)写一算法void StrInsert(char *S, char *T, int i),将串T插入到串S的第i个位置上。假设i大于S的长度,那么插入不执行。请在 处填写语句,完成此程序。算法如下: void InsStr (char *S, char *T, int i) / 将串T插入到串S的第i个位置上 cha
4、r *Temp; Temp=(char *)malloc(sizeof(charMaxsize);/ 设置一个临时串 if(idata=qj-data) qi=qi-next; qj=qj- else pos=pos- / 形式右移,继续判断pos是否为有校位移 qi=pos; qj=p;if (qj=NULL) return pos; / 匹配成功else return NULL; / 匹配失败【例7】一个文本串可用事先给定的字母映射表进展加密,例如,设字母映射表为: a b c d e f g h i j k l m n o p q r s t u v w x y z n g z q t
5、c o b m u h e l k p b a w x f y I v r s j那么字符串“encrypt被加密为“tkzwsdf。试写一算法将输入的文本串进展加密后输出;另写一算法,将输入的加密文本串进展加密后输出。typedef struct char ch2;MaxStrSize; int length; SeqString;void Encoding(char *s,seqString T) int i,j; int m=T.length; / 字母表长 int n=strlen(S); / 求文本的长度 for(i=0;in;i+) for(j=0;jdata!=q-data) /
6、 进展字符比较 q=q- if (q=NULL) return p-data; / 找到并返回字符值 q=T; / 指针恢复串T的开始结点 p=p- printf(theres no such character.); return NULL;5.3 单元练习5解答一判断题答案题目12345678910答案二填空题答案(1)字符串或串(2)堆分配存储(3)顺序串(4)空间利用率低(5)效率低(6)空间利用率低(7)0 (8)空格的个数(9)空格串 (10)字符都一样 (11)8(12)Today is 30 July,2005 (13)July(14)len r1-len+i 0 r1-len+r2-len 2!= 或 & != tag=0 i+ 3 s- s-len k0i-1 五编程题答案1 分析:从头至尾扫描r串,对于值为ch1的元素直接交换成ch2即可。【程序代码】 str *trans (str *r,char ch1,char ch2) int i; for (i=0;r-len;if (r-veci=ch1) r-veci=ch2; return(r); 2分析:将第一个元素与最后一个元素交换,第二个元素与倒数第二个元素交换,依次类推,便将该串的所有字符反序了。 str *invert (str *r) char x; (r-len%2) ; x=r-veci
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1