【问题标题】:Assigning splitted string into substrings将拆分的字符串分配为子字符串
【发布时间】:2019-05-22 15:07:24
【问题描述】:

我的问题很简单,但我无法理解它。

我当然是在互联网上搜索,但我找到的所有解决方案都使用 std::vectors 并且我不允许使用它们。

我有以下字符串: std::string str "Tom and Jerry";

我想用空格作为分隔符来分割这个字符串,然后将这三个单词分配到三个不同的字符串中。

//this is what I am trying to achieve
std::string substr1 = "Tom";
std::string substr1 = "and";
std::string substr1 = "Jerry";

这就是我用空格作为分隔符来分割字符串的方式:

std::string buf;
std::string background;
std::stringstream ss(str);
while (ss >> buf) {
    if (buf == " ")
        background = buf; // don't really understand that part

std::cout << "splitted strings: " << buf << std::endl;
}

但我不知道应该何时以及如何将拆分的字符串分配给 substr1、substr2、substr3。谁能解释我应该如何将字符串分配部分投入其中?

我尝试了一些奇怪的东西,例如:

std::string substr1, substr2, substr3;
int counter = 1;
while (ss >> buf) {
    if (buf == " ")
        background = buf; // don't really understand that part

    counter = 1;
    if (counter == 1) {
        substr1 = buf;
        std::cout << "substr1 (Tom): " << substr1 << std::endl;
        counter++;
        }
    else if (counter == 2) {
        substr2 = buf;
        std::cout << "substr2 (and): " << substr2 << std::endl;
        counter++;
        }
    else if (counter == 3) {
        substr3 = buf;
        std::cout << "substr3 (Jerry): " << substr3 << std::endl;
        counter++;
    }

谢谢。

【问题讨论】:

  • 使用字符串数组而不是 3 个单独的变量会更简单。
  • 不要在循环内设置counter = 1
  • buf 永远不会是“”。这是第一件事。第二件事:只需编写一个函数,它接受一个字符串,返回字符串中的第一个单词,然后返回字符串的其余部分。调用一次,将单词分配给 string1。再一次(使用第一次调用返回的字符串的其余部分),将结果分配给 string2。并且,对于 ol'college try 第三次,将结果放在 string3 中,丢弃其余部分。任务完成!那不是很容易吗?最简单的。在家工作。任务。永远。
  • 为什么不直接:ss &gt;&gt; substr1; ss &gt;&gt; substr2; ss &gt;&gt; substr3;
  • @GeorgeGerganov 哇,这就是这么简单。谢谢你。我不能接受你的帖子,因为你是作为评论回复的。

标签: c++ string split


【解决方案1】:

您可以简单地使用ss &gt;&gt; substr1; ss &gt;&gt; substr2; ss &gt;&gt; substr3;&gt;&gt; 运算符完全可以使用空格作为分隔符。

Code

【讨论】:

    【解决方案2】:

    在“while”中,当出现空格时,将其作为空格前的子字符串,并且“tom and jerry”有2个空格,因此被拆分为两个单词。 ss>>buf 表示将“ss”的字符串输入到 buf。因此,如果有一个 spce,它可以将单词存储在空格之前。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2015-12-28
      • 2015-09-01
      • 1970-01-01
      • 2017-06-27
      • 2014-09-26
      • 2015-01-16
      • 1970-01-01
      相关资源
      最近更新 更多