【发布时间】:2014-12-06 10:07:05
【问题描述】:
我本来打算写一些程序来从文本文件中读取文本并删除给定的单词。
不幸的是,这部分代码有问题,我收到以下异常通知:
此文本只是一个示例,基于抛出后调用的其他文本终止 'std::out_of_range' 的一个实例 what: Basic_string_erase
我猜我使用擦除的方式有问题,我正在尝试使用 do while 循环,确定每次循环时要擦除的单词的开头完成并最终擦除从要擦除的单词开头和结尾开始的文本-我正在使用它的长度。
#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。尝试输入:text text text text。 -
@Wimmel 成功了! :) 非常感谢,m8。最后,它适用于所有类型的输入。