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

2020-02-14 16:02:11来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

使用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

原文链接:https://www.cnblogs.com/Nicest1919/p/12308493.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:树、森林与二叉树的转换

下一篇:P1216 [IOI1994]数字三角形