将 Vector<int> 转换为字符串 [重复]
Posted
技术标签:
【中文标题】将 Vector<int> 转换为字符串 [重复]【英文标题】:Convert Vector<int> to String [duplicate] 【发布时间】:2013-08-07 09:49:21 【问题描述】:我想做一个程序,首先输入字符串数组,然后将其转换为整数,然后将其推送到向量。
代码是这样的:
string a;
vector<long long int> c;
cout << "Enter the message = ";
cin >> a;
cout << endl;
cout << "Converted Message to integer = ";
for (i=0;i<a.size();i++)
x=(int)a.at(i);
cout << x << " "; //convert every element string to integer
c.push_back(x);
输出:
Enter the message = haha
Converted Message to integer = 104 97 104 97
然后我把它写在一个文件中,在下一个程序中我想读回它,并将它转换回字符串,我的问题是如何做到这一点?将向量 [104 97 104 97] 转换回字符串“haha”。
我非常感谢任何帮助。 谢谢。
【问题讨论】:
Convert a vector<int> to a string 和 Converting a vector<int> to string 可能重复。 【参考方案1】:[...] 我的问题是如何做到这一点?转换向量 [104 97 104 97] 返回字符串“哈哈”。
这很容易。您可以遍历 std::vector
元素,并使用 std::string::operator+=
重载来连接结果字符串中的字符(其 ASCII 值存储在 std::vector
中)。
例如
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
vector<int> v = 104, 97, 104, 97;
string s;
for (auto x : v)
s += static_cast<char>(x);
cout << s << endl;
控制台输出:
C:\TEMP\CppTests>g++ test.cpp C:\TEMP\CppTests>a.exe haha
只是对您的原始代码的一个小注释:
x=(int)a.at(i);
您可能希望在代码中使用 C++ 样式转换,而不是旧的 C 样式转换(即上述代码中的 static_cast
)。
而且,既然你知道向量的大小,你也应该知道有效索引从0
到(size-1)
,所以使用简单快速高效的std::vector::operator[]
重载就可以了,而不是使用@ 987654330@ 方法(带有索引边界检查开销)。
所以,我会像这样更改您的代码:
x = static_cast<int>( a[i] );
【讨论】:
【参考方案2】: std::vector<int> data = 104, 97, 104, 97;
std::string actualword;
char ch;
for (int i = 0; i < data.size(); i++)
ch = data[i];
actualword += ch;
【讨论】:
【参考方案3】:使用std::string
的迭代器构造函数:
std::vector<long long int> v'h', 'a', 'h', 'a'; //read from file
std::string sstd::begin(v), std::end(v);
std::cout << s; //or manipulate how you want
它确实提出了一个问题,为什么你的向量包含long long int
,但它应该只存储字符。尝试将其转换为字符串时请注意这一点。
【讨论】:
这是否适用于 long long 的向量? @NeilKirk,只要他们都在范围内,他们最好是。字符向量对我来说更有意义。【参考方案4】:#include <algorithm>
#include <iostream>
int main()
std::vector<int> v = 104, 97, 104, 97 ;
std::string res(v.size(), 0);
std::transform(v.begin(), v.end(), res.begin(),
[](int k) return static_cast<char>(k); );
std::cout << res << '\n';
return 0;
两个音符:
-
强烈建议将您的向量更改为
std::vector<char>
- 这会使这项任务更容易,而 static_cast<char>(k)
具有潜在危险。
始终避免使用 C 风格的强制转换。如果您确实需要,请使用reinterpret_cast
,但在您的情况下,static_cast
也可以解决问题。 C 风格的演员表做了很多坏事,比如隐含的 const
演员表或出卖你的灵魂。
【讨论】:
隐式常量转换是出卖你的灵魂。 @StoryTeller 是的,你可能是对的,但我不确定是否每个人都这么看。我们这些已经为甜甜圈出卖灵魂的人可能会认为 const 铸造更糟糕。【参考方案5】:您可以使用 std::transform 使用您自己的函数对象或 lambda 函数进行反向转换,即 (char)(int)。
【讨论】:
以上是关于将 Vector<int> 转换为字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Vector<Integer> 转换为 int[]? [复制]