首先,istrstream类的两个构造函数:
istrstream::istrstream(const char* str);
istrstream::istrstream(const char* str, int size);
接着,看下面一段代码:
1 #include<strstrea.h> 2 #include<iostream.h> 3 4 void main() 5 { 6 char str[100]="I am a student. "; 7 char a; 8 istrstream ai(str, 5); 9 10 ai>>a; 11 cout<<a<<endl; 12 }
当size=0时;
以n表示第十行代码(ai>>a)的重复次数:
n=1, 输出:I;
n=2, 输出:a;
n=3, 输出:m;
n=4, 输出:a;
n=5, 输出:s;
n=11, 输出:t;
n=12, 输出:.;
n=13, 输出:.; //这位字符是' ' ;(仅仅看除去空格、制表符、换行等后的字符)
n=14, 输出:.; //这位字符是’ ‘ ;
n=15, 输出:.; //这位字符是' ' ;
n=16, 输出:.; //这位字符是' ' ;
当size>0时;
- size = 3;
n=1('I');
n=2('a');
n=3('a');
n=4('a');
2. size = 5;
n=3('m');
n=4('m');
n=5('m');
3. size = 6;
n=3('m');
n=4('a');
n=5('a');
n=6('a');
综上:
- 不论size是否大于0,二者都只输入除去空格、回车、制表符、换行等以后的字符;如果输入中遇到空格等一类字符,程序自动以后面第一个非空格一类字符代替(对于size>0的情况,这句话指size还没有起作用时候);
- 当size = 0, 当输入次数大于有效字符(除去空格一类字符)数时,后面的输入保持不变,维持在最有一个有效字符的输入状态;
- 当size>0时,
- size控制位数(此“位数”包括所有字符,甚至是空格、回车、制表符、换行等符号),当输入次数超过size后,size肯定就开始发挥限制输入的作用了;
- size 可能在输入次数小于size大小的时候就开始发挥限制作用了;("I am a student." , 此情况,如果size = 5, 那么在第三次输入得到'm'后size 就开始发挥输入限制作用了)
- 当输入被size限制后,后面再输入的字符维持在最后一个有效字符的状态;