我认为stringstream
的长度是由块计算的。这意味着它中有多少个块,它有多长。这些块被'\t' '\s' '\n'
分割。
例如,stringstream = '23\t45\t5.677\t'
,其长度应为6.应计算分隔符。
我可以验证我的想法,而参数的类型都是int
。
这是我的代码。
我想知道 s_double.tellp()不是10 。
#include<iostream>
#include<sstream>
#include<cstdlib>
using namespace std;
int main()
{
stringstream s_int;
stringstream s_double;
srand((unsinged)time(NULL));
for(int index = 0;index<5;index++)
{
double random = rand() / (double) RAND_MAX * 5;
s_int<<index<<'\t';
s_double<<random<<'\t';
}
cout<<s_int.tellp()<<'\n';
cout<<s_double.tellp()<<'\n';
exit(0);
}
输出:
10
40
在我更改了随机的范围之后, s_double 的输出也发生了变化。
double random = rand() / (double) RAND_MAX *9;
输出:
10
42
答案 0 :(得分:1)
最简单但不快的方法是:
auto nLength = strm.str().length();
关于s_double
位置 - 通过在调试器中检查此流的内容或打印它,很容易回答您的问题。您会看到0.554212545
的双倍可能是“0.554213”,1
的双倍可能是“1”,因此不同的doubles
的字符串长度完全不同。