c++ - 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;
}
解决方案
您可以创建自己的短函数,在每个标点符号后添加换行符。
例如:
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
字符。
我在这里使用指针来防止将字符串复制到函数中,以防它是一个巨大的字符串,但你可以在没有指针的情况下这样做,这样语法会更简洁一些。
推荐阅读
- javascript - 在 Node.js 中找不到本地模块
- javascript - 如何使用类模板跨多个网站的导航栏?
- jsonb - 使用 GORM for operator in 查询 JSONB 列
- amazon-web-services - AWS 安全组难题
- c++ - 是否可以“加入” gtk-event-loop
- spring - 如何覆盖 spring.data.mongodb.uri 以在 Spring 启动测试中使用 mongo TestContainer?
- python - 无法导入通过 conda-forge 安装的 numpy 或/和 scipy
- java - org.tukaani.xz.CorruptedInputException:在 java 中提取 7z 存档文件时压缩数据损坏
- python - 使用 Paramiko(或类似的)通过 ssh 向 python 程序发送命令
- reactjs - React-Router-Dom v6 保护路由