使用stringstream打破字符与其他类型之间的隔阂

考虑这样一个问题:给您一行各位数字,计算它们的和。数字之间用空格隔开。只能使用字符串。

一般考虑使用getchar,但这对于不熟悉 ASCLL 码的同学十分困难。C++的sstream头文件中提供了十分简单的办法。

string s;
getline(cin,s);
stringstream s1(s);
int num,sum=0;
while(s1>>num)sum+=num;
cout<<"sum="<<sum<<endl;

其中getline(cin,s)读取了一整行字符串。

接下来有一个奇怪的东西:stringstream s1(s)。这句话相当于定义了一个名为s1的string流,流中目前是一个字符串s。其功能十分强大。

在假设已定义了字符串流s1,并确定流内包含ss="1 2 3 4"情况下:

int num;
s1>>num;
cout<<"num="<<num<<endl;

我们发现输出为num=1。还不明显?好吧,我们把最后输出num的值加一,即:

cout<<"num="<<num+1<<endl;

输出变成了num=2!众所周知,字符是不能直接加数字的。此程序说明:s中的1存入num时变成了int型!

大家可能已经明白这条语句的作用了:将在第一个空格前的所有字符转换成对应的类型存入对应的变量!

当然,stringstream绝不止这点功能。下面通过一些例子说明:

stringstream ss; //建立一个string流
int num=114514; 
ss<<num; //将int型的num中存放的数字转换为字符串传入ss中 
char ch;
ss>>ch; //由于ch是char型变量,所以只能存放一个字符 
cout<<ch<<endl; //所以输出为1
string s;
ss>>s; //将流中剩下的东西传递给string类的s 
cout<<s<<endl; //s是一个字符串,而刚刚传递了字符'1'给ch,所以这时输出为14514

猜你喜欢

转载自www.cnblogs.com/Nicest1919/p/12308493.html