将vector {1,2,3}转换为字符串“1-2-3”AS DIGITS

我想在屏幕上的std::vector显示数字,但是在前往收件人的路上,我需要将这些数字填充到std::string

无论我尝试了什么( atoireinterpret_caststring.c_str() …),都给了我一些废话或者那些原始数字的字母表示 – 即它们对应的ascii字符。

那么我如何轻松(最好是标准方法)将vector {1,2,3}转换为string "1-2-3"

在我提到的原帖(后来编辑)中,我可以用C#或Java做到这一点。 根据πάνταῥεῖ的要求提供C#或Java中的示例,这里有一个快速的Linq C#方式:

  public static string GetStringFromListNumData(List lNumData) { // if (typeof(T) != typeof(IConvertible)) throw new ArgumentException("Expecting only types that implement IConvertible !"); string myString = ""; lNumData.ForEach(x => myString += x + "-"); return myString.TrimEnd('-'); } 

只需使用std::ostringstream

 std::vector v{1,2,3}; std::ostringstream oss; bool first = true; for(auto x : v) { if(!first) oss << '-'; else first = false; oss << (unsigned int)x; } std::cout << oss.str() << std::endl; 

这是我如何处理:

 std::vector v {1, 2, 3}; std::string s; // result auto sep = ""; // continuation separator for(auto n: v) { s += sep + std::to_string(n); sep = "-"; // change the continuation separator after first element } std::cout << s << '\n'; 

连续分隔符开始为空并在连接第一个输出后进行更改。

输出:

 1-2-3 

然而,另一个例子:

 std::vector v{1,2,3}; std::ostringstream str; std::transform(v.begin(), v.end(), std::ostream_iterator(str, "-"), [](unsigned char c){ return '0' + c;}); std::cout << str.str(); 

[编辑]

不幸的是,上面将添加额外的尾随符号,以防止它 - 更复杂的代码是必要的:

 std::transform(v.begin(), v.end(), std::ostream_iterator(str), [&](auto c){ return (str.rdbuf()->in_avail() ? "-" : "") + std::to_string(c); });