这里只是一个简单的问题.到目前为止,我一直在寻找无济于事.
谢谢!
这里有更多信息:
stringstream report_string;
report_string << "some string here...";
Run Code Online (Sandbox Code Playgroud)
在我的代码中,有各种条件为report_string变量赋值.
我想检查它是否被赋值.
Aus*_*oke 47
myStream.rdbuf()->in_avail()
可用于获取准备从a读入的可用字符的数量stringstream
,您可以使用它来检查您stringstream
是否"空".我假设你实际上并没有尝试检查价值null
.
例如,如果int
要从a中提取a stringstream
然后查看是否有任何剩余字符(即非数字),您可以检查是否myStream.rdbuf()->in_avail() == 0
.
这与你想做的事情类似吗?我不确定是否有更好的方法,但我在过去做过这个,这对我来说很好.
https://en.cppreference.com/w/cpp/io/basic_streambuf/in_avail
编辑:我看到你刚刚发布时更新了你的问题.
SvS*_*rma 10
一个简单的检查是查看流的字符串内容是否为空:
#include<assert.h>
#include<sstream>
int main(){
std::stringstream report_string;
report_string << ""; // an empty strin g
//emptiness check of stringstream
assert(report_string.str().empty());
}
Run Code Online (Sandbox Code Playgroud)
一种方法是检查内部字符串的大小并与零进行比较.请注意,这myStream.rdbuf()->in_avail()
与AusCBlock建议的不同; in_avail()可以返回一个与流的实际大小不同的值(例如,如果内部缓冲区用多个非连续的内存块表示).特别是in_avail()
原则上,在非空缓冲区中可以返回零(stringbuf
规范可能会进一步限制这一点;我没有检查过那么多细节).
此方法非常有效,也应与输出字符串一起使用:
ostringstream report_string;
if (report_string.tellp() == 0) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
小智 5
请改用eof()。
样例代码:
stringstream report_string;
if ( !(report_string.eof()) )
cout << "report_string EMPTY! \n";
Run Code Online (Sandbox Code Playgroud)
它通常是合理且可读的...
report_string.str().empty()
Run Code Online (Sandbox Code Playgroud)
...但这可能涉及动态分配并将整个字符串复制到临时字符串,然后被丢弃。
如果性能很重要,另一个选择是......
report_string.peek() == decltype(report_string)::traits_type::eof()
Run Code Online (Sandbox Code Playgroud)
这会查找尚未从流中提取的字符,忽略已成功解析/提取的输入
report_string.str().empty()
,测试仍然“看到”已经提取的输入如果较早的解析使流处于fail
您未编辑的状态,则无论是否有更多未提取的字符,clear()
都会返回eof()
归档时间: |
|
查看次数: |
52412 次 |
最近记录: |