考虑这样一个问题:给您一行各位数字,计算它们的和。数字之间用空格隔开。只能使用字符串。
一般考虑使用getchar
,但这对于不熟悉 ASCLL 码的同学十分困难。C++的sstream
头文件中提供了十分简单的办法。
string s;
getline(cin,s);
stringstream s1(s);
int num,sum=0;
while(s1>>num)sum+=num;
cout<<"sum="<
其中getline(cin,s)
读取了一整行字符串。
接下来有一个奇怪的东西:stringstream s1(s)
。这句话相当于定义了一个名为s1
的string流,流中目前是一个字符串s
。其功能十分强大。
在假设已定义了字符串流s1
,并确定流内包含s
,s="1 2 3 4"
情况下:
int num;
s1>>num;
cout<<"num="<
我们发现输出为num=1
。还不明显?好吧,我们把最后输出num
的值加一,即:
cout<<"num="<
输出变成了num=2
!众所周知,字符是不能直接加数字的。此程序说明:s
中的1
存入num
时变成了int型!
大家可能已经明白这条语句的作用了:将在第一个空格前的所有字符转换成对应的类型存入对应的变量!
当然,stringstream绝不止这点功能。下面通过一些例子说明:
stringstream ss; //建立一个string流
int num=114514;
ss<>ch; //由于ch是char型变量,所以只能存放一个字符
cout<>s; //将流中剩下的东西传递给string类的s
cout<