在 C++ 中将字符串转换为向量

Posted

技术标签:

【中文标题】在 C++ 中将字符串转换为向量【英文标题】:Converting a string to vector in C++ 【发布时间】:2015-05-17 15:53:28 【问题描述】:

在 C++ 中是否可以轻松地将字符串转换为向量?

string s = "12345"
vector<int>(s.begin(), s.end(), c => c - '0'); // something like that

目标是有一个整数向量,如 1, 2, 3, 4, 5 ;

我不想使用循环,我想写一个清晰简单的代码。 (我知道无论如何下面都会有一些循环)。

字符串总是一个数字。

【问题讨论】:

之前有人在 *** 上问过这个问题,答案如下:***.com/questions/8247793/… 他正在转换为字符向量,而不是整数。 【参考方案1】:

你可以开始

string s = "12345"
vector<int> v(s.begin(), s.end())

然后使用&lt;algorithm&gt;transform:

transform(
    s.begin(), s.end(), 
    s.begin(), 
    [](char a)return a - '0';);

【讨论】:

oneliner:transform(s.begin(), s.end(), std::back_inserter(v), [](char a)return a - '0'; ); 我同意。不管你信不信,我开始写这个作为替代,并以不太清楚为由将其删除(当然,这是非常私人的事情)。也许你指出来是件好事。 顺便说一句,您不需要static_cast,因为按照标准,算术运算会将所有操作数至少转换为int 谢谢!我不知道。相应地进行了编辑。【参考方案2】:

也许不完全是你想要的(我不知道如何在构造函数中实现它):

string s = "12345";
vector<int> v;
for_each(s.begin(), s.end(), [&v](char c) v.push_back(c - '0'););

【讨论】:

【参考方案3】:

如果你的字符串太长以至于双重迭代对性能的影响很重要,你也可以只通过一次:

vector<int> v;
v.reserve(str.size());
transform(begin(str), end(str), back_inserter(v),
    [](const auto &c)return c - '0';);

(或者使用其他人已经展示的 C++11 lambda。)

【讨论】:

【参考方案4】:

std::transform 的一个循环:

std::vector<int> v(s.size());
std::transform(s.begin(), s.end(), v.begin(), [](char c)return c - '0';);

【讨论】:

【参考方案5】:
string s = "1234";
vector<int> v;
for(auto& i : s) v.push_back(i - '0');

一个班轮!

【讨论】:

【参考方案6】:

只有我的两行:

vector<int> v(s.begin(), s.end());
for(auto& i : v) i = i - '0';

这是最简单的一个!

【讨论】:

以上是关于在 C++ 中将字符串转换为向量的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将字符串转换为双精度

在 C++ 中将变量名转换为字符串

如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]

在R中将字符串转换为二进制向量

如何在 SWIG 中将向量的锯齿状 C++ 向量转换(类型映射)为 Python

如何在 C++ 中将数字转换为字符串,反之亦然