如何将vector <int>转换为字符串?</int>

时间:2010-03-25 20:08:45

标签: c++ stl

我正在尝试将值从C ++传递给TCL。因为我不能在不使用一些复杂模块的情况下传递指针,所以我考虑将向量转换为char数组,然后将其作为空终止字符串传递(这相对简单)。

我有一个矢量如下:

12, 32, 42, 84  

我希望将其转换为:

"12 32 42 48"

我想到的方法是使用迭代器迭代向量,然后将每个整数转换为其字符串表示形式,然后将其添加到char数组(最初通过传递向量的大小动态创建) 。这是正确的方法还是已经有这样的功能?

4 个答案:

答案 0 :(得分:49)

怎么样:

std::stringstream result;
std::copy(my_vector.begin(), my_vector.end(), std::ostream_iterator<int>(result, " "));

然后你可以从result.str().c_str()

传递指针

答案 1 :(得分:5)

您可以将copystringstream对象和ostream_iterator适配器结合使用:

#include <iostream>

#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> v;
    v.push_back(12);
    v.push_back(32);
    v.push_back(42);
    v.push_back(84);

    stringstream ss;
    copy( v.begin(), v.end(), ostream_iterator<int>(ss, " "));
    string s = ss.str();
    s = s.substr(0, s.length()-1);  // get rid of the trailing space

cout << "'" << s << "'";

    return 0;
}

输出是:

  

'12 32 42 84'

答案 2 :(得分:4)

我使用stringstream来构建字符串。类似的东西:

std::vector<int>::const_iterator it;
std::stringstream s;
for( it = vec.begin(); it != vec.end(); ++it )
{
    if( it != vec.begin() )
        s << " ";

    s << *it;
}

// Now use s.str().c_str() to get the null-terminated char pointer.

答案 3 :(得分:2)

你做得对,但你可以使用std::ostringstream来创建你的char数组。

#include <sstream>

std::ostringstream StringRepresentation;
for ( vector<int>::iterator it = MyVector.begin(); it != MyVector.end(); it++ ) {
    StringRepresentation << *it << " ";
}

const char * CharArray = StringRepresentation.str().c_str();

在这种情况下,CharArray仅供阅读。如果要修改值,则必须复制它。您可以使用Boost.Foreach简化此操作。