我想创建一个接收3个字符串类型参数s,oldval,newval
的函数,使用iterator,insert and erase
将oldval
中的s
替换为newval
。
当我编译它时,error :no match for the operator == in...
。
string &foo(string &s,string &oldval,string &newval)
{
string::iterator it=s.begin();
while(it!=s.end())
{
if(*it==oldval)
{
it=s.erase(it);
it=s.insert(it,newval);
}
++it;
}
return &s;
}
答案 0 :(得分:1)
it
正在迭代字符串的字符; *it
是一个字符。您可以将其与另一个字符进行比较,但不能与字符串进行比较。
oldval
和newval
应该有char
类型,而不是string
;或者你需要更复杂的逻辑来在输入中查找和替换子串,而不是单个字符。成员函数find
和replace
可能对此有所帮助。
请注意,替换单个字符就像*it = newval;
一样简单,不需要乱七八糟地删除和插入字符。
答案 1 :(得分:1)
字符串迭代器"指向"到一种char(构成std :: string类型的std :: basic_string的模板参数),但是你要使用==将该字符与字符串(oldval)进行比较。
std :: string没有char的重载比较运算符。
答案 2 :(得分:0)
尤,
我看到了你的问题。 " S"是一个字符串。 Wenn你使用指针,指针只指向一个字符。这意味着,只选择了一个字符。如何将字符与字符串进行比较?编译器会告诉你, "与运营商不匹配==在..." 。 你需要查看网站: http://www.cplusplus.com/reference/string/string/find/
祝你好运
张德伦