C ++ - 将Vector值赋给std :: string而不会丢失数据

时间:2017-09-29 17:00:18

标签: c++ string

我想将一个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

我的代码存在的问题是该字符串包含奇怪的字符,例如☺ ☺☺☺ ☺☺☺☺ ☺ ...有什么方法可以阻止它吗?

3 个答案:

答案 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, " "));
}

注意: 我同意其他两个答案,但也觉得这个答案突出了这个问题。