我一直试图寻找这个问题的答案,但到目前为止我还没有运气。我在学习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;)
答案 0 :(得分:3)
/var/app/current
尽管我没有机会测试它,但试试这段代码。
答案 1 :(得分:1)
替换字符串的部分并插入新字符串可以通过while循环完成(连续查找字符串,直到我们找到字符串的点用完为止。)
编辑:此方法未使用string::replace
方法。查看@Dong Li对替换方法的回答。但是,底部的代码是适用于string::erase
和string::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);
直到我们没有重新定位目标字符串。