如何将由空格分隔的一串数字放入数组中? [复制]

Posted

技术标签:

【中文标题】如何将由空格分隔的一串数字放入数组中? [复制]【英文标题】:How to put a string of numbers seperated by whitespaces to an array? [duplicate] 【发布时间】:2020-08-15 21:16:05 【问题描述】:

我有一个代码,它获取由空格分隔的一串数字,例如: "19 210 67"

然后将它们分开并打印出来。但问题是我想将它们三个一个一个地放入一个数组中 所以我有一个字符串数组,例如:["19","210","67"]

我怎样才能做到这一点?谢谢。

这是我的 C++ 代码:

    std::string s = myText;
    std::string delimiter = " ";

    size_t pos = 0;
    std::string token;
    while ((pos = s.find(delimiter)) != std::string::npos) 
        token = s.substr(0, pos);
        std::cout << token << std::endl;
        s.erase(0, pos + delimiter.length());
    
    std::cout << s << std::endl;

【问题讨论】:

我在您的代码示例中没有看到任何数组。不用说,您不需要所有这些代码来分隔带空格的数字字符串。 如何获得 myText? 【参考方案1】:

尝试提升拆分(在#include 中找到) ),这是一个带有制表符分隔符的示例:

    string input("hello world"); 
    vector<string> result; 
    boost::split(result, input, ' '); 

或者只是在代码的 for 循环中声明一个向量并 push_back 标记?

【讨论】:

【参考方案2】:

使用std::istringstream 解析字符串,使用std::vector&lt;std::string&gt; 存储每个单独的字符串:

#include <string>
#include <vector>
#include <sstream>
#include <iostream>

int main()

    std::string test = "19 210 67";
    std::istringstream strm(test);
    std::vector<std::string> vec;
    std::string s;

    // loop for each string and add to the vector
    while ( strm >> s )
       vec.push_back(s);

    // Output the results
    for (auto& v : vec)
      std::cout << v << " ";

输出:

19 210 67 

【讨论】:

【参考方案3】:

假设你有任意数量的值,它们都是int 首先,你标记你的字符串:

How do I tokenize a string in C++?

标记化的结果是一系列(std::string 或空终止的char* 字符串)标记,您需要对其进行转换。这看起来像:

std::transform(
    token_iterator_at_first_token,
    token_iterator_after_last_token,
    [](const auto& token)  return std::stoi(token); 
);

... 取决于您的迭代器的外观。如果你有一个容器,迭代器可能会被称为the_container.cbegin()the_container.cend()

【讨论】:

以上是关于如何将由空格分隔的一串数字放入数组中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

读取以逗号分隔的一串数字

如何将用空格分隔的用户的连续值放入列表中? [复制]

在一行上给出一串数字,用空格分隔

如何将由空格缩进的用户输入存储到 String 数组中并将数字转换为 int 数组?

将由空格分隔的整数字符串更改为 int 列表

NSPredicate 检查以逗号分隔的一串数字是不是包含数字