首页 > 其他 > 详细

字符串的查找删除

时间:2021-01-30 17:39:22      阅读:26      评论:0      收藏:0      [点我收藏+]

虽然是道水题,但还是有点东西可写的。

最暴力的思路就是找一个删一个,但删除的话必然涉及到大量元素的移动。

int main()
{
    string s;
    cin>>s;
    getchar();

    for(int i=0;i<s.size();i++) s[i]=tolower(s[i]);

    string a,b;
    while(getline(cin,a))
    {
        b=a;
        for(int i=0;i<b.size();i++) b[i]=tolower(b[i]);

        int pos=b.find(s);
        while(pos != string::npos)
        {
            a.erase(pos,s.size());
            b.erase(pos,s.size());
            pos=b.find(s);
        }

        pos=b.find(‘ ‘);
        while(pos != string::npos)
        {
            a.erase(pos,1);
            b.erase(pos,1);
            pos=b.find(‘ ‘);
        }

        cout<<a<<endl;
    }
    //system("pause");
    return 0;
}

自然想到用空间换时间的做法,新开一个string来存储去除目标字符后的字符串,在查找部分也可以优化一下,让其从指定下标处开始查找。

int main()
{
    string s;
    cin>>s;
    getchar();

    for(int i=0;i<s.size();i++) s[i]=tolower(s[i]);

    string a,b;
    while(getline(cin,a))
    {
        b=a;
        for(int i=0;i<b.size();i++) b[i]=tolower(b[i]);

        int pos1=b.find(s,0),pos2=b.find(‘ ‘,0);
        string res;
        for(int i=0;i<b.size();i++)
        {
            if(i == pos1)
            {
                pos1=b.find(s,i+s.size());
                i+=s.size()-1;
            }
            else if(i == pos2)
            {
                pos2=b.find(‘ ‘,i+1);
            }
            else res+=a[i];
        }

        cout<<res<<endl;
    }
    //system("pause");
    return 0;
}

字符串的查找删除

原文:https://www.cnblogs.com/fxh0707/p/14349038.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!