回 帖 发 新 帖 刷新版面

主题:[讨论]请教减号运算符重载的一个问题,高手帮忙

有两行字符串,比如12345123451234512345和123,怎样编写一个函数,使产生一行新字符串,为45454545,即去除前者字符串中的所有含有123的字符,要求用减号运算符重载,并且能返回一个值,高手请帮忙。

回复列表 (共3个回复)

沙发

我随便写了一个,能达到你的要求,我是这样理解的,只要出现1,2,3三个中任意一个字符就去掉。不知你的是不是这样!
[code=c]
//有两行字符串,比如12345123451234512345和123,怎样编写一个函数,使产生一行新字符串,为45454545,
//即去除前者字符串中的所有含有123的字符,
//要求用减号运算符重载,并且能返回一个值,高手请帮忙。
#include<iostream>
#include<string>

using namespace std;

string operator -(string &s1,string& s2);

int main()
{
    string str="12345123451234512345";
    string s="123";
    str=str-s;
    cout<<str<<endl;
    system("pause");
    return 0;
}

string operator -(string& s1,string& s2)
{
    string::iterator iter=s1.begin();
    string::size_type ix;
    while(iter!=s1.end())
    {
       for(ix=0;ix!=s2.size();++ix)
         if(*iter==s2[ix])
         {   
             s1.erase(iter);
             --iter;
         }
         ++iter;
    }
    return s1;
}
             
    
 
       
       

[/code]

板凳

elegant87兄弟的程序我没有看,但我想做法是错误的,在这里你的结果刚好是对的,那是因为123都连续。如果是112345,正确的答案应该是145的,而按elegant87的思路会变成45。
    这样的问题我想应该是有很多方法可以解的,比如用三个变量s1,s2,s3分别记录连续的三个字符,当s1,s2,s3分别等于“1”,“2”,“3”时就删除这三个字符。

3 楼

可以循环调用字符串类CString中的Find函数查找含“123”的子字符串然后删除之,直到找不到为止!

我来回复

您尚未登录,请登录后再回复。点此登录或注册