Maison > Questions et réponses > le corps du texte
要求输入多行字符串,把'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);
}
PHPz2017-04-17 13:15:48
看到一个问题
if(*(p-1)) { //这里,如果第一个字符就是'c',你这里不就访问越界了吗?
if (*p==*(p-1)) {
while (*p){
*p=*(p+1);
if(*(p+1))
p++;
}
p--;
}
在你的程序中,这不止这一处,还有你移动数组的时候,如
while(p)p=*(p+1)