问题描述
要求输入多行字符串,把’ch’替换成k,把一对重复的字符如’mm’去重改’m’;代码的问题是……如果输入两行,就只有第二行被处理并且put出来如果输入一行,这一行里的第一对符合条件的字符会被处理,其余的都不会
我对于while (gets(ch)!=NULL)不是很熟,每次读一行的话,按道理应该不会出现这么蠢的问题……希望懂的前辈能指点一下
代码:
int main(){char ch[80]={0};int flag=0;while (gets(ch)!=NULL) { char *p=ch; while (*p) {if (*p==’c’) { flag=1;}else if(*p==’h’&&flag==1){ *(p-1)=’k’; //找到’ch’并且改成’k’ while (*p){*p=*(p+1); //’ch’后方的字母依次向前移动p++; } flag=0; p--;}if(*(p-1)) { if (*p==*(p-1)) { //查重复字符串对while (*p){ *p=*(p+1); //后方的字母依次向前移动 if(*(p+1))p++;}p--; }}p++; } }puts(ch);
}
问题解答
回答1:看到一个问题
if(*(p-1)) { //这里,如果第一个字符就是’c’,你这里不就访问越界了吗? if (*p==*(p-1)) { while (*p){ *p=*(p+1); if(*(p+1))p++;}p--; }
在你的程序中,这不止这一处,还有你移动数组的时候,如while(p)p=*(p+1)