istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。

istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。

#include<iostream>
#include<sstream>
using namespace std;
int main()
{
 string str, line;
 while(getline(cin, line))
 {
  istringstream stream(line);
  while(stream>>str)
   cout<<str.c_str()<<endl;
 } 
 return 0;
}
测试:
input:
abc   df   e              efgeg      ffg

ouput:
abc
df
e
efgeg
ffg



istringstream类研究

C++程序把输入和输出看作字符流,输入时,程序从输入流中提取字节,输出时,程序把字节插入到输出流中。对于输入输出流既可以来自标准输入输出设备,也可以来自文件,甚至可以来自String对象,三者分别属于iostream family、fstream family、sstream family。
对于iostream类,就是我们通常所说的标准流,它把程序跟标准I/O连接在一起,输入来自键盘,输出送往监视器。
对于fstream类,它把程序跟文件关联起来,输入来自文件,输出到文件。
对于sstream类,它是提供程序和string对象之间的I/O,可通过ostringstream sout和istringstream sin来声明两个对象,分别对应输出流和输入流,这给编程带来极大的方便,例如可以从文本文件中读取一批数字字符到string对象中,再把string对象作为程序的输入流,既可把从文件中读取来的数字字符单个进行读取,从而进行处理。

以上内容为网上转载,呵呵,原来iostream,fstream还有sstream呈三权分立之势。

#include < iostream >
#include
< fstream >
#include
< sstream >

using   namespace  std;


int  main ()
{
    
char str[1000]="12 34.53 【O(∩_∩)O~(*^__^*)】 1234 12.12345678901234567890 #@$#@$#@$&*@#&#(!@#$";    
    istringstream test(str);
    
//test="12 34.53 345342 34.123456789 【O(∩_∩)O~(*^__^*)】"
    int a;
    
double b;
    
char c[100];
    
while(1)
    
{
        test
>>a;
        test
>>b;
        test
>>c;
    }

return 0;
}



以上程序在vc6.0上运行正常;
值得一提的是,经过我的测试,我发现虽然sstream是纯c++的东西,但是它也可以用char型数组进行初始化;
而且输入的数据默认情况下以空格为分隔符;
输入浮点类型的时候,最多只能取到小数点后15位,第15位会进行四舍五入;
如果你的输入格式和数据流格式不匹配,那么将导致程序完全运行错误,不过我很奇怪c++内部为什么不会报错?
只有一种情况例外
对于一个浮点数 比如说123,456
如果先以整数输入,那么得到123
再以浮点数输入,得到0.456;

小结:感觉istringstream和sscanf是同类型的函数,只不过一个属于传统的c语言而另一个属于高级的c++;
用它可以方便的分离字符串,并且可以在字符串长度未知的情况下进行操作,这是sscanf所无可比拟的。

最后,要特别鸣谢的是张宏课上面的那位同学,多谢你的指点 :-)


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值