我正在尝试将一个值从C++传递到TCL。由于无法传递指针而不使用一些复杂的模块,因此我考虑将向量转换为字符数组,然后将其作为空终止字符串传递(这相对容易)。
我有一个向量,如下所示:
12, 32, 42, 84
我想将其转换为类似于:
"12 32 42 48"
我考虑的方法是使用迭代器来遍历向量,然后将每个整数转换为字符串表示,然后将其添加到字符数组中(该数组最初通过传递向量的大小来动态创建)。这样做对吗?或者是否已经有一个可以完成此操作的函数?
这个怎么样?
std::stringstream result;
std::copy(my_vector.begin(), my_vector.end(), std::ostream_iterator<int>(result, " "));
然后你可以传递指针从result.str().c_str()
您可以使用copy
与stringstream
对象和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;
}
Output is:
'12 32 42 84'
我会使用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.
你说得没错,但是你可以使用 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 简化此过程。
#include <string>
或<iterator>
头文件。<sstream>
包含所需的定义。但您确实需要包括<algorithm>
、<vector>
和<sstream>
头文件。 - Billy ONealstring::erase
来删除末尾的空格。 - Björn Pollex<string>
中你可能是对的,但在std::ostream_iterator
中需要使用<iterator>
。 - Adrian McCarthy