将 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&lt;char&gt; - 这会使这项任务更容易,而 static_cast&lt;char&gt;(k) 具有潜在危险。 始终避免使用 C 风格的强制转换。如果您确实需要,请使用reinterpret_cast,但在您的情况下,static_cast 也可以解决问题。 C 风格的演员表做了很多坏事,比如隐含的 const 演员表或出卖你的灵魂。

【讨论】:

隐式常量转换出卖你的灵魂。 @StoryTeller 是的,你可能是对的,但我不确定是否每个人都这么看。我们这些已经为甜甜圈出卖灵魂的人可能会认为 const 铸造更糟糕。【参考方案5】:

您可以使用 std::transform 使用您自己的函数对象或 lambda 函数进行反向转换,即 (char)(int)。

【讨论】:

以上是关于将 Vector<int> 转换为字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 fmt 库将 vector<int> 转换为字符串

如何将 Vector<Integer> 转换为 int[]? [复制]

将整数字符串转换为整数的2D向量

如何将 std::vector<thrust::device_vector<int>> 转换为 int**?

将 cv::Mat 转换为 vector<int>

将 std::vector<int> 从原始内存转换为数组[重复]