在 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())
然后使用<algorithm>
的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++ 中将字符串转换为向量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]