【问题标题】:c++ vector to comma delimitated string? [duplicate]c ++向量到逗号分隔的字符串? [复制]
【发布时间】:2012-11-28 08:33:28
【问题描述】:

可能重复:
C++ Vector to CSV by adding Comma after each element

我有一个向量:

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

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

如何将其转换为逗号分隔的字符串?

然后再转换回来?

【问题讨论】:

  • 我会看看 boost::algorithm::join 和 boost::algorithm::split
  • 您的向量略有相同。无论哪种方式,概念都是相同的。这是重复的。
  • 可以使用标准库算法,但我更喜欢循环使用它。逗号定界与其他任何方法一样好 - 当然,前提是您要记住转义文字逗号。
  • 是的,当他们可以自己重新发明所有错误时,为什么有人会考虑重用有效且经过测试的代码。
  • @R.MartinhoFernandes 我建议如果你可以将错误引入一个简单的连接循环,那么编程可能不适合你。

标签: c++


【解决方案1】:

为此使用std::transformstd::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' 类型不完整,无法定义
  • 你真的对我投了反对票,因为你不知道如何用谷歌搜索 std::stringstream 并找出要包含的标题吗?
  • @moswald 投赞成票!
  • @SchighSchagh 哈哈,谢谢 :)
【解决方案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))

【讨论】:

  • 最后会留下一个流浪的','
  • 很好,非常感谢,但它没有命名类型? “它”是什么?
  • 另外,如何获取向量对的每一部分,即 int 和 string?
  • 他使用的是C++03,你应该输入实际类型而不是auto
  • @user1013512:在尝试使用 std::pair 之前,您需要学习 C++。
猜你喜欢
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多