我正在尝试学习字符串,并且已经找到了如何替换以及插入现有字符串的方法。目前,我有3个字符串被声明为常量,我将它们合并到一个字符串变量中,这使它们一字不漏。
我还将这些字符串中每个出现的“ Hi”更改为“ Bye”。我的3个字符串捆绑为一个,如下所示:“嗨!我叫xxxx!我想一个人呆,但我不知道该怎么做,您能帮我吗?”
我希望它显示为:嗨!我叫xxxx!我想一个人呆着,但我不知道该怎么做,您能帮我吗?
一旦发生断词,我想使用换行符插入换行符“ \ n”,但这意味着标点符号将消失,使用insert将首先在标点符号之前插入换行符,并且不会继续进行下一个结果:“嗨!我叫xxxx!我想独自一人,但我不知道该怎么做,您能帮我吗?“
我将代码更改为仅包括点以简化代码,一旦解决,相同的解决方案便可以应用于任何其他部分,例如问号或感叹号。
关于如何解决此问题的任何提示?
#include <iostream>
#include <string>
using namespace std;
string const Text0 = "Hi.";
string const Text1 = "My name is xxxx.";
string const Text2 = "I would like to be on my own but I don't know how to, could you help me.";
string const Text3 = "I would, but I don't know how to.";
string text = Text0 + Text1 + Text2 + Text3;
int main() {
while (text.find("I") != string::npos) {
text.replace(text.find("I"), 1, "J");
}
while (text.find("like") != string::npos) {
text.replace(text.find("like"), 4, "milk");
}
text.insert(text.find("."), "\n");
cout << text;
return 0;
}
您可以创建自己的短函数,在每个标点符号后添加换行符。
例如:
void addNewLines(std::string *text)
{
for (int i = 0; i < text->length(); i++)
{
if ((*text)[i] == '!' || (*text)[i] == '?' || (*text)[i] == '.')
{
(*text)[i + 1] = '\n';
}
}
}
如您在这段代码中所看到的,在for循环中,您将从字符串的第一个字符转到最后一个字符,并且在每个标点符号之后,都用\n
字符替换空白。
我在这里使用指针来防止将字符串复制到函数中,以防它是一个巨大的字符串,但是您可以在没有指针的情况下进行操作,这样语法会更简洁一些。