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

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

问题描述:

我想删除字符串中存在的撇号。我试图写一些东西,但似乎我的语法错了。我无法弄清楚问题出在哪里,但我知道在我的语法中有些东西是不正确的。我使用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()); 
... 
} 

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

  2. 你错过了对于remove_if参数的右括号。

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

它工作得很好!谢谢本杰明。 – T4000

remove_if接受3个参数,而不是4,让你的整个erase()线被搞砸了。

还要注意的是,第三个参数是一个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

+0

感谢AusCBloke,它现在工作正常! – T4000