stringstream的大小

use*_*241 33 c++

有没有直接的方法来计算stringstream中内部字符串的大小?

在这里,str()返回一个副本然后它获得字符串的大小.

std::stringstream oss("String");
oss.str().size();
Run Code Online (Sandbox Code Playgroud)

van*_*eto 51

有:

std::stringstream oss("Foo");
oss.seekg(0, ios::end);
int size = oss.tellg();
Run Code Online (Sandbox Code Playgroud)

现在,size将包含字符串的大小(以字节为单位).

编辑:

这也是一个好主意,放在上面的代码片段后,它将内部指针放回字符串的开头.

oss.seekg(0, ios::beg);
Run Code Online (Sandbox Code Playgroud)

  • 还有一件事:无论哪个指针受到干扰都应该放回原处,不一定是开头.无副作用实现会在更改之前获取指针位置:int loc0 = oss.tellg(); 然后重置它:oss.seekg(loc0,ios :: beg); (12认同)
  • 一些简单的可用性会很好.并不是解决方案并不容易,但仍然非常难看.有点难以相信没有尺寸()便利功能.:)和 (8认同)
  • 更严重的是,重要的是要注意您的p和g,放置并获取指针。也就是说,一个示例使用seekg()和tellg(),而另一个示例使用seekp()和tellp()。两者都起作用,但不要混在一起。 (3认同)
  • 如果使用写指针,是否还需要搜索到最后?难道不是总是在尽头吗? (2认同)

Ste*_*end 19

std::stringstream oss("String");
oss.seekp(0, ios::end);
stringstream::pos_type offset = oss.tellp();
Run Code Online (Sandbox Code Playgroud)

这是针对写指针的,但是对于Visual C++ v10上的读指针,结果是相同的.