如何将字符串插入到字符串流的开头

时间:2011-10-28 19:03:39

标签: c++ stringstream

仅作为示例而非实际代码:

stringstream ss;
ss << " world!";

string hello("Hello");

// insert hello to beginning of ss ??

感谢所有的回复,我也找到了这个代码,它起作用了:

ostringstream& insert( ostringstream& oss, const string& s )
{
  streamsize pos = oss.tellp();
  oss.str( s + oss.str() );
  oss.seekp( pos + s.length() );
  return oss;
}

3 个答案:

答案 0 :(得分:5)

如果不制作至少一份副本,就无法做到。一种方式:

std::stringstream ss;
ss << " world!";

const std::string &temp = ss.str();
ss.seekp(0);
ss << "Hello";
ss << temp;

这依赖于“最重要的const”来延长临时的生命周期,避免额外复制。

或者,更简单,也可能更快:

std::stringstream ss;
ss << " world!";

std::stringstream temp;
temp << "Hello";
temp << ss.rdbuf();
ss = std::move(temp); // or ss.swap(temp);

这借鉴了this answerrdbuf方法,因为这里有趣的问题是如何最小化副本。

答案 1 :(得分:1)

我能看到的唯一方法是从流创建字符串并为您的其他字符串添加前缀

string result = hello + ss.str();
由于某种原因,它被称为流。

答案 2 :(得分:0)

假设 ss1 包含“hello”

ss1 << ss.rdbuf();

ss1 << "hello" << ss;

请参阅此网址以获取更多信息: -

<强> stringstream