【正确答案】算法由主函数和搜索字符并删除字符、删除串中第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
【答案解析】