2011-11-05 132 views
2

我想刪除字符串中存在的撇號。我試圖寫一些東西,但似乎我的語法錯了。我無法弄清楚問題出在哪裏,但我知道在我的語法中有些東西是不正確的。我使用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()); 
... 
} 

回答

4
  1. remove_if需要用於其第三個參數,而不是元素值的謂詞。你想要簡單的舊remove

  2. 你錯過了對於remove_if參數的右括號。

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

它工作得很好!謝謝本傑明。 – T4000

0

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