c++ - 字符串中删除特定字符的题目中,此处应该用s[j+1]还是s[j]
ringa_lee
ringa_lee 2017-04-17 14:38:44
[C++讨论组]

输入字符串s及待删除的字符ch,将s中所有与ch相同的字符都删除掉,输出删除后得到的新串。以下程序是直接在数组s中进行删除,得到的新串仍然在数组s中。

#include <iostream>
using  namespace  std;

int main( )
{
    char  s[81], ch;
    int k,j;
    cin>>s;
    cin>>ch; //输入待删除的字符(不允许允许为空格符)
    //以下k代表s中每个字符的下标
    //j代表未删除(保留)字符应放在s中新的位置下标
    for(k=j=0;s[k]!='\0';k++)
        if(s[k]!=ch)
        {
            s[j]=s[k];
            __(1)__;
        }
    __(2)__='\0'; //得到的新串末尾要放结束符
    cout<<s<<endl;
    return 0;
}

第一个空填j++;
第二个空填s[j+1]还是s[j];
我认为是s[j],但是网上的答案是s[j+1],如果后者是对的,那么前者在什么情况下出错?

ringa_lee
ringa_lee

ringa_lee

全部回复(1)
迷茫

应该是s[j]
先看循环内,如果没有遇到等于输入的ch,那么j==k是一直成立的。
如果遇到了ch,那么k自增了,但是j没有变,也就是遇到了几次ch,那么k就比j大几。
假如有nch在字符串中,那么出循环的时候k-j == n应该成立。此时k的位置是\0,依然应该是s[j] = s[k],此时s[k] == '\0,所以s[j] == '\0'

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号