首页 > 解决方案 > C ++在标点符号后将字符串分成新行

问题描述

我正在尝试学习字符串,并且我已经弄清楚如何替换以及插入现有字符串。我现在有 3 个字符串,我已将它们声明为常量,我已将它们合并到一个字符串变量中,将它们一个接一个地放置。

我还在这些字符串中将每次出现的“Hi”更改为“Bye”。我的 3 根琴弦捆绑成一根如下:“嗨!我叫 xxxx!我想一个人,但我不知道怎么做,你能帮帮我吗?”

我希望它显示为:嗨!我叫xxx!我想一个人,但我不知道怎么做,你能帮帮我吗?

一旦出现标点符号,我想插入换行符“\ n”,使用替换有效,但这意味着标点符号将消失,使用插入将首先在标点符号之前插入换行符,它不会继续下一个结果是:“嗨!我叫 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

解决方案


您可以创建自己的短函数,在每个标点符号后添加换行符。

例如:

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字符。

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


推荐阅读