[英]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
添加到字符串中,您被int
到char
的隐式转换绊倒了。 低值对应于不可打印的字符,这就是为什么您在 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.