标准I/O库_兼_stringstream使用

 今天在OJ上刷题的时候偶然间看到关于stringstream的说明,在网上找到一系列非常好的文章。

 对应的章节在<c++ primer>的第八章“标准I/O库”里出现,所以提前一些写这篇文章。

首先我们都知道c++在用cin读取输入的数值时是以空白符(white)作为标记的,那么为了能够读取出一整行的内容,我们使用如下的语句 string s, getline(cin,s);如果这一行里含有大量的空格符,需要转换的话,我们使用stringstream来进行。

首先需要定义头文件#include<sstream>

void convert()
{
    string s,buf;
    stringstream ss;
    getline(cin,s);
    ss.str(s);          //按照空格进行分割
    while(ss>>buf)      //又及,可以定义一个无限循环,在if(ss.fail()) break;下也能输出结果
        cout<<bufr<<endl;
}
这样就会在每行输出每个单词。

同样的,我们还可以依次来完成不同类型的数值之间的转换。

如以int型向string型来说,在问题求解与分析课上我们用的实际上是类似于进制转换的方式,将余数转化为char型依次赋值给string[i]的每位,但有了sstream后:

void convert2()
{
    int a=10987;
    string s,buf;
    stringstream ss;
    ss<<a;
    //ss>>buf;
   ss>>buf;
   for(int i=0;i<buf.size();i++) cout<<buf[i]<<endl;
}
再如string像int型转换:

void convert3()
{
    string s,buf;
    stringstream ss;
    int a,b=100;
    s="100";
    ss<<s;
    ss>>a;
    cout<<a+b<<endl;
}
还可以用string向char[]赋值,用strlen()来检验是否赋值成功。

呃,晚上写的时候才发现

关于c++ 第八章里讲的流输出,还有打开文件,只能说太抽象了,本来的话,用ifstream和ofstream就可以了。

有些处理基于每行实现,而其他处理则要操纵每行中每个单词,这时用ss.str(s);

除此之外没有发现什么有用的东西~……


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值