如何将由空格分隔的一串数字放入数组中? [复制]
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<std::string>
存储每个单独的字符串:
#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()
。
【讨论】:
以上是关于如何将由空格分隔的一串数字放入数组中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章