我想删除字符串中的撇号。我试着写一些东西,但似乎我的语法错了。我无法弄清楚问题出在哪里,但我知道我的语法不对。我使用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());
...
}
答案 0 :(得分:4)
remove_if
需要第三个参数的谓词,而不是元素值。你想要简单的remove
。
您错过了remove_if
参数的右括号。
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
。