问答题 已知顺序串s,编写一算法,将s串中的所有x字符都删除。
【正确答案】算法由主函数和搜索字符并删除字符、删除串中第i个字符三个函数组成。
   程序如下:
   #define MAXLEN 25
   typedef struct string    /*定义串的结构类型*/
   { char ch[MAXLEN];    /*字符型数组ch存放串值,数组长度为25*/
     int len:    /*存放串的长度*/
   } STRING;
   STRING delete(s,i)    /*删除s串中第i个字符*/
   STRING s;
   int i;
   {
     int k;
     if((i<1)‖(i>s.len))
     {
       printf("error\n");    /*位置值非法,删除无效*/
       return;
     }
     elSe
     {/*将下标从i(即第i+1个)到s.len(即第s.len+1个)的字符(为'/0')依次前移一个字符*/
      for(k=i;k<=s.len;k++)
       s.ch[k-1]=s.ch[k];
      s.len=s.len-1;    /*串长度减1*/
      return(s);
     }
   }
   STRING searchanddelete(s,c)    /*搜索字符c,并删除字符c*/
   STRING s;
   char c;
   {
     int i=0:
     while(i<s.len)    /*在串中下标从0到s.len-1的字符中搜索字
                      母c*/
     {
       if(s.ch[i]==c)    /*搜索到串S中下标为i的字符为c,*/
       }
         s=delete(s,i+1);    /*删除第i+1个字符,即下标为i的字符*/
         i--;    /*因为删除串S中下标i的字符,原下标i位置
                 由后面未查字符顶上*/
      }
      i++;    /*继续搜索下一个字符*/
    }
    return(s);
  }
  main()
  {
    STRING s={"xxxxdefxhijxxsty",16};
    printf("\n/%s/%d\n",s.ch,s.len);
    s=searchanddelete(s,'x');    /*将s串中的所有x字符都删除*/
    printf("\n/%s/%d\n",s.ch,s.len);
  }
   输出结果为:
   xxxxdefxhijxxsty 16
   defhijsty 9
【答案解析】