c++ - 如何删除句子中的整个单词c ++
问题描述
我想删除句子中的特定单词,我试图将句子分解成单词并比较单词但是当我调用擦除函数时,索引会更新。我尝试了另一种方法,它会删除我不想删除的单词中的子字符串。任何人都可以帮帮我吗?我应该使用什么方法。
输入
房子在空中旋转了两三圈,缓缓升起。
输出
房子在空中旋转了两三圈,缓缓升起。
这是我的函数原型
int RemoveWordFromLine(string line, string word)
{
// ==========================
string tmp_str="",spacebar=" ";
int start=0,end=-1;
for(int i=0;i<line.length();i++)
{
if(isspace(line[i])||int(line[i])==44||int(line[i])==46)
{
cout<<tmp_str<<" "<<start<<" "<<end<<endl; // compare
if(tmp_str==word)
{
line.erase(start,end);
}
tmp_str="";
start=i+1;
end=i;
} else
{
tmp_str+=line[i];
end++;
}
}
if(tmp_str==word)
{
line.erase(start,end);
}
cout<<tmp_str<<" "<<start<<" "<<end<<endl; // compare
cout<<line<<endl;
// ==========================
}
解决方案
您正在传递结束位置而不是要删除的字符串长度。你只需要更换
if(tmp_str==word)
{
line.erase(start,end);
}
和
if(tmp_str==word)
{
line.erase(start,word.length()+1); //+1 to prevent 2 spaces
}
line.erase(start-1,word.length()+1);
如果你想保留'.',你也可以这样做。或 ',' 在删除的单词之后。
推荐阅读
- string - 带有 ord 'x' 的 Haskell 案例陈述
- facebook - 尝试在 Facebook 应用程序上将用户添加为测试人员时出错
- vim - 通过绑定在 Vim 中插入选项卡只能使用一次
- c# - 场
已分配,但从未使用过它的值 - php - 如何在php循环中查询rand的结果?
- linker - 可以将导入绑定在 64 位可执行文件中吗?
- python - 如何以特定方式格式化浮点数?
- java - 如何在java中恢复h2数据库
- c++ - 自引用类
- azure-web-app-service - 如何在不同目录中使用 Azure Key Vault 和 Azure Active Directory B2C?