为什么擦除函数在字符串函数中给出错误?

时间:2015-05-22 15:04:17

标签: c++

擦除功能给出了无效参数的错误,但我已经通过了

第一个参数 =索引编号  第二个参数 =否。字符

然后它也给出了错误。 的例如

word3 = word2.erase(word.begin(), word.length()/2-1);

2 个答案:

答案 0 :(得分:2)

查看http://en.cppreference.com/w/cpp/string/basic_string/erase(1),您会看到需要传递第一个字符的 index 以及要删除的字符数。您将迭代器作为第一个参数传递。只是做

word3 = word2.erase(0, word.length()/2 -1);
//                     ^^^^
//                     this should probably be word2

或使用接受范围的(3)重载:

word3 = word2.erase(word2.begin(), std::next(word2.begin(), word2.length()/2 -1));

我也相信你应该在word2erase,而不是word

答案 1 :(得分:0)

begin()的成员函数std::string返回迭代器。这是它的返回类型std::string::iteratorstd::string::const_iterator

您正在尝试使用参数类型为erase的成员函数std::string::size_type

basic_string& erase(size_type pos = 0, size_type n = npos);

如果你想使用这个成员函数,你应该像

一样编写调用
word2.erase( 0, word.length()/2 - 1 )

如果要使用使用以下成员函数的迭代器的函数

iterator erase(const_iterator first, const_iterator last);

然后电话看起来像

word2.erase( word.begin(), std::next( word.begin(), word.length()/2 - 1 ) )

或只是

word2.erase( word.begin(), word.begin() + word.length()/2 - 1 )

我希望这不是一个错字,你调用名为word2的对象的函数,而在用作参数的表达式中,你使用名为word的对象