主题:[讨论]请教减号运算符重载的一个问题,高手帮忙
xj198811111147
[专家分:0] 发布于 2008-08-13 10:04:00
有两行字符串,比如12345123451234512345和123,怎样编写一个函数,使产生一行新字符串,为45454545,即去除前者字符串中的所有含有123的字符,要求用减号运算符重载,并且能返回一个值,高手请帮忙。
回复列表 (共3个回复)
沙发
elegant87 [专家分:700] 发布于 2008-08-14 07:54:00
我随便写了一个,能达到你的要求,我是这样理解的,只要出现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]
板凳
wyjq395 [专家分:2710] 发布于 2008-08-14 08:48:00
elegant87兄弟的程序我没有看,但我想做法是错误的,在这里你的结果刚好是对的,那是因为123都连续。如果是112345,正确的答案应该是145的,而按elegant87的思路会变成45。
这样的问题我想应该是有很多方法可以解的,比如用三个变量s1,s2,s3分别记录连续的三个字符,当s1,s2,s3分别等于“1”,“2”,“3”时就删除这三个字符。
3 楼
f-wind [专家分:1240] 发布于 2008-08-15 09:48:00
可以循环调用字符串类CString中的Find函数查找含“123”的子字符串然后删除之,直到找不到为止!
我来回复