2016-07-15 61 views
0

我的字符串是!!(!())。我想從字符串中刪除雙重感嘆號。remove_copy與字符串的用法

這工作,但這種不工作

remove_copy(str.begin(), str.end(),ostream_iterator<string>(cout), "!!"); 

使用上述線引發此錯誤就刪除所有感嘆詞

remove_copy(str.begin(), str.end(),ostream_iterator<char>(cout), '!');//gives (()) 

的/ usr /包括/ C++/5 /位/predefined_ops.h:194:17:錯誤:ISO C++禁止指針和整數之間的比較[-fpermissive] {return * __ it == _M_value; }

+0

引用明顯表明沒有重載需要特定的字符串。 – chris

+0

@chris ostream_iterator具有'template >'。這意味着我可以使用字符串嗎? –

+1

@SamidhT字符串是一個字符列表。 remove_copy遍歷列表並刪除char。它也可以處理字符串列表。 – Balu

回答

0

閱讀remove_copy

OutputIterator remove_copy (InputIterator first, InputIterator last, 
          OutputIterator result, const T& val); 

The function uses operator== to compare the individual elements to val. 

的文檔所以它使用字符串的每一個字符,並與VAL比較。所以第二種情況是行不通的。

最後我做這種方式

str.erase(str.find("!!"),2); 

另外,還要確保該字符串有「!」否則程序崩潰

if(str.find("!!") != string::npos) 
    str.erase(str.find("!!"),2); 
+0

@ user4581301有效點。我編輯了答案。 –

+0

您編輯的代碼會執行兩次'find',這是浪費時間,您已經找到了一次!它應該是:'auto pos = str.find(「!!」); if(pos!= string :: npos)str.erase(pos,2);'另外,如果在字符串中有多個'「!!」'出現?如果有'「!!!」'怎麼辦?這不是一個通用的解決方案。 –

+0

@JonathanWakely如果有「!!!」它真的取決於你想如何處理它(2個!! vs 1的實例)。儘管如此,我仍然同意你的觀點,這不是一般化的,也不是有效的。 –