题库 题库

【简答题】

试题四(共15分)阅读以下说明和C函数,将解答填入答题纸的对应栏内。
【说明】函数del_substr(S,T)的功能是从头至尾扫描字符串S,删除其中与字符串T相同的所有子串,其处理过程为:首先从串S的第一个字符开始查找子串T,若找到,则将后面的字符向前移动将子串T覆盖掉,然后继续查找子串T,否则从串S的第二个字符开始查找,依此类推,重复该过程,直到串S的结尾为止。该函数中字符串的存储类型SString定义如下:
    typedef struct{
        char *ch;                /*串空间的首地址*/
        int length;                /*串长*/
}SString;
【C函数】
void del substr(SString*S, SString T)
{
int i, j;
          if(S->length<1||T.length<1||S->length<T.length)
                  return;
        i=0;                          /* i为串S中字符的下标 */
          for(;;){
              j=0;                      /* j为串T中字符的下标 */
            while(i<S->length&&j<T.length){
/* 在串S中查找与T相同的子串 */
                    if(S->ch[i]==T.ch[j]){
                              i++; j++;
                      }
                      else{
                            i=  (1)  ;  j=0;
/* i值回退,为继续查找T做准备*/
                      }
              }
            if(  (2)  ){          /* 在S中找到与T相同的子串 */
                    i=  (3)    ;      /* 计算S中子串T的起始下标 */
                    for(k=i+T.length; k<S->length; k++)
    /* 通过覆盖子串T进行删除 */
                          S->ch[  (4)  ]=S->ch[k];
                        S->length=  (5)  ; /* 更新S的长度*/
              }
            else break;              /* 串S中不存在子串T */
      }

参考答案

(1) i-j+1 
(2) j==T.length 
(3)i-T.length 
(4) i++
(5) S->length-T.length

相关试题