首页 > 解决方案 > 如何删除句子中的整个单词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;


  // ==========================
}

ideone的链接

标签: c++

解决方案


您正在传递结束位置而不是要删除的字符串长度。你只需要更换

 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);如果你想保留'.',你也可以这样做。或 ',' 在删除的单词之后。


推荐阅读