【问题标题】:How to transform a vector<int> into a string? [duplicate]如何将 vector<int> 转换为字符串? [复制]
【发布时间】:2010-03-25 20:08:44
【问题描述】:

我正在尝试将值从 C++ 传递到 TCL。由于不使用一些复杂的模块就无法传递指针,因此我正在考虑将向量转换为 char 数组,然后将其作为空终止字符串传递(这相对容易)。

我有一个向量如下:

12, 32, 42, 84  

我想转换成类似的东西:

"12 32 42 48"

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

【问题讨论】:

  • 哇,我也是。正是这种情况!

标签: c++ stl


【解决方案1】:

怎么样:

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

然后你可以从result.str().c_str()传递指针

【讨论】:

  • 先生,我永远不会再忘记 ostream_iterator 和复制。谢谢。
  • @Adrian McCarthy:对于此示例代码,您不需要 #include &lt;string&gt;&lt;iterator&gt;&lt;sstream&gt; 包含所需的定义。你确实需要&lt;algorithm&gt;&lt;vector&gt;&lt;sstream&gt;
  • 如何避免尾随空格?
  • 之后可以使用string::erase删除尾随空格。
  • @BillyONeal:您可能在&lt;string&gt; 中是对的,但对于std::ostream_iterator,您需要&lt;iterator&gt;
【解决方案2】:

您可以将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'

【讨论】:

  • 感谢您删除尾随空格...
  • 如果您在使用 ostream_iterator 时遇到 VS2015 问题,请将 作为头文件。
【解决方案3】:

我会使用字符串流来构建字符串。比如:

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.

【讨论】:

  • +1 用于避免我的建议的尾随空格。
  • 以额外的比较为代价 if( it != vec.begin() ).
【解决方案4】:

您没看错,但您可以使用 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 来简化此操作。

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2011-06-18
    • 1970-01-01
    • 2011-08-07
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多