我想将一个int向量的值赋给std :: string,以便将它传递给另一个函数,现在我写了这段代码:
int input;
std::cout << "Insert the value to convert: \t";
std::cin >> input;
std::string output;
std::vector<int> rem;
int r; //Just a simple binary conversion
while(input != 0) {
r = input % 2;
rem.push_back(r);
input /= 2;
}
std::reverse(rem.begin(), rem.end());
for(std::vector<int>::const_iterator it = rem.begin(); it != rem.end(); ++it) {
output += *it; //Assign every value of the iterator to string variable
}
std::cout << output; Print the value of output
我的代码存在的问题是该字符串包含奇怪的字符,例如☺ ☺☺☺ ☺☺☺☺ ☺
...有什么方法可以阻止它吗?
答案 0 :(得分:2)
为什么在添加到输出时不将int转换为字符串? 试试这个:
std::stringstream ss;
ss << *it;
std::string str = ss.str();
output += str; //Assign every value of the iterator to string variable
答案 1 :(得分:2)
您实际上并不需要额外的数据副本来实现您的目标:
std::string output;
while(input) {
output += (input % 2 ? "1" : "0");
input /= 2;
}
std::reverse(std::begin(output), std::end(output));
std::cout << output;
答案 2 :(得分:0)
我想按顺序将int向量的值赋给std :: string 将它传递给另一个函数,现在我写了这段代码:
您的问题是整数可以隐式转换为char。代码output += *it;
实际上意味着类似于:
char& i = *it;
i = 1; //Compiles, but how is 1 represented (1 != '1')
//considering encoding etc?
我用功能方法对它进行了尝试。你最后可以用std :: ostringstream实例替换std :: cout并获取它的字符串。
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
int main() {
std::cout << "Insert the value to convert: \t";
std::vector<int> rem;
// Get user input...
std::copy_if(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
std::back_inserter(rem), [](int val) {return val != 0;});
//Do your transforation
std::transform(rem.begin(), rem.end(), rem.begin(), [](int i){return i % 2; });
//And reverse and copy to stream...
std::reverse(rem.begin(), rem.end());
std::copy(rem.begin(), rem.end(), std::ostream_iterator<int>(std::cout, " "));
}
注意: 我同意其他两个答案,但也觉得这个答案突出了这个问题。