C++中如何将向量转换为逗号分隔的字符串?

5

我有一个向量:

可能是重复问题:
如何将C ++向量转换为CSV格式,在每个元素后添加逗号

其中包含:

std::vector<std::pair<int, QString> > recordingArray;

我需要将它转换为逗号分隔的字符串,以便存储在数据库中(是否有更好的数据格式 - 所有数据都需要放在一个字段中)。
如何将其转换为逗号分隔的字符串?
然后,如何将其转换回去?

1
我会看一下 boost::algorithm::join 和 boost::algorithm::split。 - frankc
1
你的向量有点相同,无论如何概念都是一样的。它是一个重复。 - user195488
可以使用标准库算法,但我更喜欢在循环中解决它。逗号分隔与任何其他方法一样好 - 当然,前提是您记得转义文字逗号。 - Elliott
3
为什么有些人宁愿重新发明所有的漏洞,也不愿考虑重用已经测试过并且有效的代码呢? - R. Martinho Fernandes
@R.MartinhoFernandes,如果你在一个简单的连接循环中都能引入错误,那么也许编程并不适合你。 - Elliott
使用 Boost 的 join 函数的好例子:https://dev59.com/MnI-5IYBdhLWcg3weoTR。 - frabcus
2个回答

17

使用std::transform和一个std::stringstream来实现此操作。

std::stringstream str;

std::transform(
    recordingArray.begin(),
    recordingArray.end(),
    std::ostream_iterator<std::string>(str, ", "),
    [](const std::pair<int, QString> &p) { return std::to_string(p.first) + ", " + p.second.toStdString(); });

聚合体'std::stringstream str'类型不完整,无法定义。 - panthro
6
你真的因为不知道如何使用Google搜索std::stringstream并找出要包含哪个头文件而对我进行了踩票吗? - moswald
@moswald,点个赞! - Nicu Stiurca

2
string line = "";
auto it = recordingArray.begin();

while(it != recordingArray.end())
{
  line.append(*it);
  line.append(',');
}

这里假设每个项目都可以直接转换为字符串。您可能需要编写一个toString函数。
string toString(std::pair<int, QString>> input)
{
  /* convert the data to a string format */
}

然后调用line.append(toString(*it))

3
这将在末尾留下一个杂散的逗号, - Lily Ballard
非常好,非常感谢,但它没有命名类型?“它”是什么? - panthro
另外,我如何获取向量对的每个部分,即int和string? - panthro
1
在尝试使用std::pair之前,您需要学习C++。 - user195488
我知道这篇文章很旧,但如果你和我一样想在结尾省略逗号,那么可以这样做:if(it != --recordingArray.end()) - cael ras
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接