开发者社区> 问答> 正文

gets()得到多行字符串,替换子字符串并且去除连续重复的字符,只有第一次遇到会正常处理,后面的就失效了?

要求输入多行字符串,把'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);
}

展开
收起
a123456678 2016-06-08 23:04:12 2167 0
1 条回答
写回答
取消 提交回答
  •  if(*(p-1)) {   //这里,如果第一个字符就是'c',你这里不就访问越界了吗?
                if (*p==*(p-1)) {   
                    while (*p){
                        *p=*(p+1); 
                        if(*(p+1))
                            p++;
                    }
                    p--;
                }

    在你的程序中,这不止这一处,还有你移动数组的时候,如
    while(p)p=*(p+1)

    2019-07-17 19:32:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载