C++ Primer 学习笔记:IO 类

由上图能够知道,I/O操作的基类是ios_base,各个类的用途例如以下:

<iostream>
                     istream    从流中读取数据
                     ostream   向流中写数据
                     iostream  对流进行读写操作。派生于istream和ostream
<fstream>
                     ifstream    从文件里读取数据。派生于istream
                     ofstream   向文件里写数据,派生于ostream
                     fstream     读写文件, 派生于iostream
<sstream>
                     istringstream    读取string对象。派生于istream
                     ostringstreamstring对象。派生于ostream
                     stringstream     读写string对象,派生于iostream

iostream主要用于读写流的基本类型,fstream主要用于读写文件类型,sstream主要用于读写内存的string对象类型,如下图

这里写图片描述

IO对象不能拷贝不能赋值;
IO操作的函数形参和返回值类型不能为流类型 ;
进行IO操作的函数常以引用方式传递和返回流,且不能为const;

这里要重点说明的就是sstream中的stringstream,这个实在是太好用了,用于数据类型转换,切割字符串等等是十分的好用。

例子如下:

基本数据类型转换例子 int转string

#include <string>
#include <sstream>
#include <iostream> 

int main()
{
    std::stringstream stream;
    std::string result;
    int i = 1000;
    stream << i; //将int输入流
    stream >> result; //从stream中抽取前面插入的int值
    std::cout << result << std::endl; // print the string "1000"
} 

除了基本类型的转换,也支持char *的转换。

#include <sstream>
#include <iostream> 

int main()
{
    std::stringstream stream;
    char result[8] ;
    stream << 8888; //向stream中插入8888
    stream >> result; //抽取stream中的值到result
    std::cout << result << std::endl; // 屏幕显示 "8888"
} 

再进行多次转换的时候,必须调用stringstream的成员函数clear().

#include <sstream>
#include <iostream>
int main()
{
    std::stringstream stream;
    int first, second;
    stream<< "456"; //插入字符串
    stream >> first; //转换成int
    std::cout << first << std::endl;
    stream.clear(); //在进行多次转换前,必须清除stream
    stream << true; //插入bool值
    stream >> second; //提取出int
    std::cout << second << std::endl;
} 

按照空格分割字符串

#include<iostream>
#include<algorithm>
#include<sstream>
#include<string>

using namespace std;

int main()
{
    string line;
    while(getline(cin,line))
    {
        int sum=0;
        string x;
        stringstream ss(line);
        while(ss>>x)
            cout<<x<<endl;

    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值