1. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为 3 。
2. 子串的定位运算称为串的模式匹配; 被匹配的主串 称为目标串, 子串 称为模式。
3 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。
4 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为 (n-m+1)*m 。
5 设有两个串p和q,求q在p中首次出现的位置的运算称作:
A.连接 B.模式匹配 C.求子串 D.求串长
6 设串s1=’ABCDEFG’,s2=’PQRST’,函数con(x,y)返回x和y串的连接串,subs(s, i, j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1, 2, len(s2)), subs(s1, len(s2), 2))的结果串是:字符串长度17模式串长度
A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF
7函数void insert(char *s, char *t, int pos)将字符串t插入到字符串s中,插入位置为pos。请用c语言实现该函数。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)
[题目分析]本题是字符串的插入问题,要求在字符串s中的pos位置,插入字符串t。首先应查字符串s的pos位置,将第pos个字符到字符串s尾的子串向后移动字符串t的长度,然后将字符串t复制到字符串s的第pos位置后。
对插入位置pos要验证其合法性,小于1或大于串s的长度均为非法,因题目假设给字符串s的空间足够大,故对插入不必判溢出。
void insert(char *s, char *t, int pos)
//将字符串t插入到字符串s的第pos个位置
{int i=1,x=0; char *p=s,*q=t; //p,q分别为字符串s和t的工作指针
if(pos<1) { printf(“pos参数位置非法\n”);exit(0);}
while(*p!=’\0’&& i<pos) { p++;i++;} //查pos位置
//若pos小于串s长度,则查到pos位置时,i=pos。
if(*p == '\0') { printf("%d位置大于字符串s的长度",pos);exit(0);}
else //查字符串的尾
while(*p!= '\0') { p++; i++;} //查到尾时,i为字符‘\0’的下标,p也指向‘\0’
while(*q!= '\0') { q++; x++; } //查字符串t的长度x,循环结束时q指向'\0'
for(j=i;j>=pos ;j--){ *(p+x)=*p; p--;}//串s的pos后的子串右移,空出串t的位置
q--; //指针q回退到串t的最后一个字符
for(j=1;j<=x;j++) *p--=*q--; //将t串插入到s的pos位置上
[算法讨论] 串s的结束标记('\0')也后移了,而串t的结尾标记不应插入到s中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论