我想删除字符串中的撇号,但是不起作用

时间:2011-11-05 01:40:40

标签: c++ string

我想删除字符串中的撇号。我试着写一些东西,但似乎我的语法错了。我无法弄清楚问题出在哪里,但我知道我的语法不对。我使用Dev-C ++。

{...
cout<<"enter the word to test "<<endl;
getline(cin,givenword);
string str (givenword);

std::string deleteapostr(givenword);
// trying to delete apostrophe if present in the string
deleteapostr.erase(std::remove_if(deleteapostr.begin(), deleteapostr.end(), '\'', deleteapostr.end());
...
}

2 个答案:

答案 0 :(得分:4)

  1. remove_if需要第三个参数的谓词,而不是元素值。你想要简单的remove

  2. 您错过了remove_if参数的右括号。

  3. deleteapostr.erase(std::remove(deleteapostr.begin(), deleteapostr.end(), '\''), deleteapostr.end());
    

答案 1 :(得分:0)

remove_if需要3个参数,而不是4个,所以你的整个erase()行都搞砸了。

另请注意,第3个参数是Predicate,因此您不会传递要删除的字符'\'',而是传递一个为该类型返回bool的函数。正在迭代:

bool isApostrophe(char c) { return c == '\''; }
...
deleteapostr.erase(std::remove_if(deleteapostr.begin(), deleteapostr.end(), isApostrophe), deleteapostr.end());

编辑: std::remove对于这种情况可能更好,但我将其保留为std::remove_if,因为这是您开始使用的内容,它还为您提供了选项将谓词更改为isPunctuation