如何在C++中获取子字符串并在字符串之间添加字符

3

我有一个字符串,内容为“Hello foo how are you.”

我想把它改成“Hello\r\nfoo how are you.”

我想知道如何获取子字符串“Hello”,并在空格处添加\r\n,同时保留其他所有字符串。这是为了显示多行。

编辑:

我们不知道第一个子字符串的长度。我们不知道第一个子字符串将有多长。

谢谢。

3个回答

1
不是完整的答案,因为这看起来像是作业,但你可以使用其他方法,包括在<algorithm>中使用std::find()和在<string.h>中使用strchr()。如果您需要搜索任何空格而不仅仅是' '字符,则可以使用std::find_first_of()strcspn()
将来,您可以查阅以下文档: std::basic_string的成员函数,<string>中的实用程序函数,<algorithm>中的函数以及<string.h>中的函数,因为这些通常是您要使用的工具。

我应该在此添加一个附注。你可能经常使用正则表达式库来处理这类事情。 - Davislor

1
要获取子字符串,你需要使用函数string::substr
string::substr (size_t pos = 0, size_t len = npos) const;
  1. pos参数是要复制为子字符串的第一个字符的索引。
  2. len参数是从索引开始包括在子字符串中的字符数。

返回一个新实例化的字符串对象,其值为从调用它的指定字符串对象中获取的子字符串。

// Example:
#include <iostream>
#include <string>

int main () {
  std::string str1= "Hello Stack Overflow";
  std::string str2 = str.substr (0,5); // "Hello
  std::cout << str2 << std::endl; // Prints "Hello"

  return 0;

}

更新:然而看起来与您的标题不同,您需要的是更改中间一些字符,而不知道子字符串的长度

对于这个问题,您的答案是string::replace

string& replace (size_t pos,  size_t len,  const string& str);

替换从索引pos开始到索引len的字符串部分。

  1. pos参数是要替换的第一个字符的索引。
  2. len参数是从该索引开始要替换的字符数。
  3. 用于替换的str字符串参数。

    // Example
    int main() 
       std::string str = "Hello Stack Overflow.";
       std::string str2 = "good";
       str.replace(6, 4, str2);   // str = "Hello goodStackOverflow"
       return 0;
    }

在某些编译器中,您可能不需要添加它,但是您需要包含字符串头文件,以确保您的代码具有可移植性和可维护性:
#include <string>

string::substr 用于获取子字符串而不是替换子字符串,这是一个低效的答案,而且坦率地说并不是 OP 所要求的。 - Andria
你所做的只是获取子字符串“Hello”,而没有在字符串之间添加字符。 - Andria
你还没有回答问题,再这样下去你就是在抄我的答案了。 - Andria
@chbchb55 只要我们不知道询问者指的是哪个子字符串,就无法找到答案。据我所知,我已经告诉读者如何使用源代码完成标题中的两个任务。你正在为询问者提供练习的机会,而我则提供他完成任务所需的工具。 - Santiago Varela
他说:“我想知道如何获取子字符串Hello并在其中替换空格为\r\n,同时保留所有其他字符串不变。” - Andria
提问者所要求的子字符串显然是“ ”。 - Andria

1
#include <iostream>
#include <string>

int main() {
  std::string s = "Hello foo how are you.";
  s.replace(s.find_first_of(" "),1,"\r\n");
  std::cout << s << std::endl; #OUTPUTS: "Hello
                               #          foo how are you."
  return 0;
}

你想要使用的是string::replace(pos,len,insert_str);,这个函数允许你用"\r\n"替换s中指定的子字符串。
编辑:你需要使用s.find_first_of(str)来查找字符串" "的第一个出现位置。

但是为此,我应该知道第一个子字符串有多少个字符。情况是我们不知道第一个子字符串中有多少个字符。 - rpmish99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接