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 设有两个串pq,求qp中首次出现的位置的运算称作:
A.连接      .模式匹配    C.求子串      D.求串长
6 设串s1=’ABCDEFG’s2=’PQRST’,函数con(x,y)返回xy串的连接串,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        BCDEFEF
7函数void insert(char *s, char *t, int pos)将字符串t插入到字符串s中,插入位置为pos。请用c语言实现该函数。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)
[题目分析]本题是字符串的插入问题,要求在字符串s中的pos位置,插入字符串t。首先应查字符串spos位置,将第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;  //pq分别为字符串st的工作指针
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--;}//spos后的子串右移,空出串t的位置
q--;  //指针q回退到串t的最后一个字符
for(j=1;j<=x;j++) *p--=*q--;  //t串插入到spos位置上
[算法讨论] s的结束标记('\0')也后移了,而串t的结尾标记不应插入到s中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。