我的意思是寫一些程序,它將從文本文件中讀取文本並擦除給定的單詞。String.erase給出out_of_range異常
不幸的是,什麼是錯用這個代碼特定部分,我得到下面的異常通知:
本文是基於所謂的其他textterminate扔 的「性病實例後只是一個樣本,:: out_of_range 「什麼<>:Basic_string_erase
我想這有什麼錯我用擦,我試圖用做而循環,確定其目的是要被刪除的每一個字的開頭方式循環完成並最終完成擦除文本的開始處,這意味着要被擦除,並結束它 - 我使用它的長度。
#include <iostream>
#include <string>
using namespace std;
void eraseString(string &str1, string &str2) // str1 - text, str2 - phrase
{
size_t positionOfPhrase = str1.find(str2);
if(positionOfPhrase == string::npos)
{
cout <<"Phrase hasn't been found... at all"<< endl;
}
else
{
do{
positionOfPhrase = str1.find(str2, positionOfPhrase + str2.size());
str1.erase(positionOfPhrase, str2.size());//**IT's PROBABLY THE SOURCE OF PROBLEM**
}while(positionOfPhrase != string::npos);
}
}
int main(void)
{
string str("This text is just a sample text, based on other text");
string str0("text");
cout << str;
eraseString(str, str0);
cout << str;
}
你可能不希望()'在調用'find'添加'str2.size到'positionOfPhrase'。嘗試輸入:「文本文本文本文本」。 – wimh 2014-12-06 10:21:22
@Wimmel它的工作! :)非常感謝,M8。最後,它適用於每種類型的輸入。 – 2014-12-06 10:36:33