【发布时间】:2010-01-14 17:39:11
【问题描述】:
谁能告诉我或给我一个简单的例子,说明如何将一个 int 附加到包含单词“Something”(或任何单词)的字符串流中?
【问题讨论】:
标签: c++ string stringstream
谁能告诉我或给我一个简单的例子,说明如何将一个 int 附加到包含单词“Something”(或任何单词)的字符串流中?
【问题讨论】:
标签: c++ string stringstream
stringstream ss;
ss << "Something" << 42;
为了将来参考,请查看此内容。
【讨论】:
我可能会按照这个一般顺序做一些事情:
#include <string>
#include <sstream>
#include <iostream>
int main() {
std::stringstream stream("Something ");
stream.seekp(0, std::ios::end);
stream << 12345;
std::cout << stream.str();
return 0;
}
使用普通流,添加到最后,您可以使用std::ios::ate 或std::ios::app 作为第二个参数打开,但是对于字符串流,这似乎并不可靠(至少对于真正的编译器) -- gcc 和 VC++ 都不会产生我期望的输出(当/如果我这样做)。
【讨论】:
12345hing,因为初始化std::stringstream 对象而不设置开始写入的位置将导致任何输入写入流缓冲区的开头.
如果您已经在使用 boost,它有 lexical_cast 可以用于此。它基本上是上述的打包版本,适用于任何可以写入和读取流的类型。
string s("something");
s += boost::lexical_cast<string>(12);
如果你还没有使用 boost,它可能不值得使用,但如果你已经使用它,它可以让你的代码更清晰,尤其是做类似的事情
foo(string("something")+boost::lexical_cast<string>(12));
【讨论】: