C ++在标点符号后将字符串分成新行

问题描述 投票:0回答:1

我正在尝试学习字符串,并且已经找到了如何替换以及插入现有字符串的方法。目前,我有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;
}
c++ string
1个回答
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字符替换空白。

我在这里使用指针来防止将字符串复制到函数中,以防它是一个巨大的字符串,但是您可以在没有指针的情况下进行操作,这样语法会更简洁一些。

© www.soinside.com 2019 - 2024. All rights reserved.