tellp()计算stringstream长度的原理是什么?

时间:2016-06-06 05:02:41

标签: c++ stringstream

我认为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

1 个答案:

答案 0 :(得分:1)

最简单但不快的方法是:

auto nLength = strm.str().length();

关于s_double位置 - 通过在调试器中检查此流的内容或打印它,很容易回答您的问题。您会看到0.554212545的双倍可能是“0.554213”,1的双倍可能是“1”,因此不同的doubles的字符串长度完全不同。