繁体   English   中英

向量元素到字符串

[英]Vector elements to a string

我正在尝试将vector<int>转换为字符串,开头为'[' ,向量的每个元素之间为',' ,结尾为']' 但是我的 output 是[,,,,] (想要 output [6,4,3,2,1] )。

你能向我解释我做错了什么吗?

这是我尝试过的:

int main() {

   std::vector<int> elements = {1,2,3,4,6};   
   std::string outputString = "[";

      
    for(int i = elements.size() - 1; i >= 0; i--) {
        if (i > 0) {

            outputString.push_back(elements.at(i));
            outputString.push_back(',');
        }
        else {
            outputString.push_back(elements.at(i));
        }
    }
    outputString.push_back(']');
    std::cout << std::endl << outputString << std::endl;    
}

std::string::push_back将单个char添加到字符串中,您被intchar的隐式转换绊倒了。 低值对应于不可打印的字符,这就是为什么您在 output 中看不到它们的原因。

您可以使用operator+=std::to_string

#include <vector>
#include <string>
#include <iostream>

int main() {

   std::vector<int> elements = {1,2,3,4,6};   
   std::string outputString = "[";

      
    for(int i = elements.size() - 1; i >= 0; i--) {
        if (i > 0) {

            outputString += std::to_string(elements.at(i));
            outputString.push_back(',');
        }
        else {
            outputString += std::to_string(elements.at(i));
        }
    }
    outputString.push_back(']');
    std::cout << std::endl << outputString << std::endl;    
}

PS:我什至不知道std::string::push_back存在。 您还可以使用operator+=将单个字符添加到字符串中。

您按原样将整数添加到字符串中,隐式地将它们转换为单个字符。 大多数值低于 32 的字符都是不可打印的。 您需要将整数转换为字符串,例如使用std::to_string()

outputString += std::to_string(elements[i]); 

另一种实现方法是改用std::ostringstream ,让operator<<为您处理转换,例如:

#include <iostream>
#include <sstream>
#include <vector>
#include <string>

std::string vector_to_string_in_reverse(const std::vector<int> &elements)
{
    std::ostringstream outputStream;
    outputStream << '[';
    if (!elements.empty()) {
        auto it = elements.crbegin(), end = elements.crend();
        outputStream << *it++;
        while (it != end) {
            outputStream << ',' << *it++;
        }
    }
    outputStream << ']';
    return outputStream.str();
}

int main() {
    std::vector<int> elements = {1,2,3,4,6};
    std::cout << std::endl << vector_to_string_in_reverse(elements) << std::endl;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM