如何循环字符串并替换其中的部分? C ++

时间:2015-11-21 01:18:37

标签: c++ string loops replace

我一直试图寻找这个问题的答案,但到目前为止我还没有运气。我在学习C ++的课程中。练习是在字符串中查找单词的出现并将其替换为另一个单词。我知道我可能需要某种循环来遍历整个字符串,但我不知道该怎么做。目前,我的程序在字符串中找到第一个匹配项并替换它。然而,该程序目前没有找到并替换该单词的第二次出现。请看看我到目前为止的情况:

#include <iostream>
#include <string>

using namespace std;

int main()
{

string replacedString("that");
string stringToReplace("the");
string sentence("the dog jumped over the fence");

int strLength = stringToReplace.length();

int position = sentence.find(stringToReplace);
sentence.replace(position, strLength, replacedString);


cout << sentence;



return 0;

}

好的,感谢Patrick帮助我了解字符串的工作原理。我继续对代码进行了一些更改:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string sentence; // String to hold the user inputted phrase
string stringToReplace; // String to hold the user inputted string that will be replaced
string replacedString; // String to hold the user inputted replacement string

cout << "Please type in a sentence: " << endl;
getline(cin, sentence);
cout << "Please type in a string to search for: " << endl;
getline(cin, stringToReplace);
cout << "Please type in a replacement string: " << endl;
getline(cin, replacedString);


//First time, we will see if we find the string
int pos = sentence.find(stringToReplace);

while (pos != string::npos)
{
    //Erase the targeted string at the location we set
    sentence.erase(pos, stringToReplace.length());
    //Insert the new string where we last deleted the old string
    sentence.insert(pos, replacedString);
    //Get position of targeted string to erase
    pos = sentence.find(stringToReplace);
}

cout << sentence << '\n';



return 0;

}

如果在句子中找不到搜索到的字符串,是否有办法添加消息 - 如果找不到,则为某些内容(cout&lt;&lt;&#34; Not Found& #34;)

2 个答案:

答案 0 :(得分:3)

/var/app/current

尽管我没有机会测试它,但试试这段代码。

答案 1 :(得分:1)

替换字符串的部分并插入新字符串可以通过while循环完成(连续查找字符串,直到我们找到字符串的点用完为止。)

编辑:此方法未使用string::replace方法。查看@Dong Li对替换方法的回答。但是,底部的代码是适用于string::erasestring::insert方法的代码。

以下是完成此任务的代码:

#include <iostream>

using namespace std;

int main()
{
  string replacedString("that");
  string stringToReplace("the");
  string sentence("the dog jumped over the fence");

  //First time, we will see if we find the string
  int pos = sentence.find(stringToReplace);

  while(pos != string::npos)
  {
    //Erase the targeted string at the location we set
    sentence.erase(pos,stringToReplace.length());
    //Insert the new string where we last deleted the old string
    sentence.insert(pos,replacedString);
    //Get position of targeted string to erase
    pos = sentence.find(stringToReplace);
  }

  cout << sentence << '\n';

  return 0;

}

代码输出:

that dog jumped over that fence

<强>解释

我们首先尝试找到字符串:

int pos = sentence.find(stringToReplace);

如果我们这样做,则pos将等于第一次出现的位置。

接下来,将使用while循环来检查字符串是否存在(如果它返回string::npos则不存在)

while(pos != string::npos)

现在,在我们发现字符串确实存在后,我们会将目标字符串放在位置pos并删除它:

sentence.erase(pos,stringToReplace.length());

最后,将新字符串插入位置pos

sentence.insert(pos,replacedString);

然后,我们继续在

中重复找到字符串
pos = sentence.find(stringToReplace);

直到我们没有重新定位目标字符串。