C++流概述
在程序设计中,数据输入/输出(I/O)操作是必不可少的,C++语言的数据输入/输出操作是通过I/O流库来实现的。C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。
C++流涉及以下概念:
- 标准I/O流:内存与标准输入输出设备之间信息的传递;
- 文件I/O流:内存与外部文件之间信息的传递;
- 字符串I/O流:内存变量与表示字符串流的字符数组之间信息的传递。
STL中定义的流类:
流类分类 | 流类名称 | 流 类 作 用 |
流基类 | ios | 所有流类的父类,保存流的状态并处理错误 |
输入流类 | istream | 输入流基类,将流缓冲区中的数据作格式化和非格式化之间的转换并输入 |
ifstream | 文件输入流类 | |
istream_withassign | cin输入流类,即操作符>>输入流 | |
istrstream | 串输入流类, 基于C类型字符串char*编写 | |
istringstream | 串输入流类, 基于std::string编写 | |
输出流类 | ostream | 输出流基类,将流缓冲区中的数据作格式化和非格式化之间的转换。并输出 |
ofstream | 文件输出流类 | |
ostream_withassign | Cout、cerr、clog的输出流类,即操作符<<输出流 | |
ostrstream | 串输入流类, 基于C类型字符串char*编写 | |
ostringstream | 串输入流类, 基于std::string编写 | |
输入/输出流类 | iostream | 多目的输入/输出流类的基类 |
fstream | 文件流输入/输出类 | |
strstream | 串流输入/输出类, 基于C类型字符串char*编写 | |
stringstream | 串流输入/输出类, 基于std::string编写 |
注,对于串流,提供了两套类,一个基于C类型字符串char *编写(定义于头文件strstream),一个基于std::string编写(定义于sstream), 后者是C++标准委员会推荐使用的。另外看一些资料,都说还定义了文件流和串流的基类fstreambase和strstreambase,而且描述ofstream继承于ostream和fstreambase,但没有找到,于是省略了。可搜索关键字(fstreambase或strstreambase)查看详情。
预定义标准流对象:
istream &cin; //键盘
ostream &cout; //屏幕
ostream &cerr; //屏幕
ostream &clog; //打印机
wistream &wcin;
wostream &wcout;
wostream &wcerr;
wostream &wclog;
C++中读取string对象
1.标准输入读取:cin >> string
a.忽略开头所有的空白字符(空格、换行、制表符等);
b.读取字符直至再次遇到空白字符,读取终止;
2.读取整行文本:getline(istream, string)
a.不忽略开头的空白字符;
b.读取字符直至遇到换行符,如果第一个字符是换行符,则返回空string;
c.返回时丢弃换行符,换行符不存储在string中。
STL C++中string、ifstream、stringstream的使用
1、从标准输入接受字符串,然后进行相关处理
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
int main()
{
string s; //定义一个stirng对象,从标准输入接受一个字符串
cout<<"请输入一行字符串:"<<endl;
getline(cin,s);
stringstream ss(s); //定义一个string流(使用s实例化)
cout<<"处理后的字符串为:"<<endl; //将string流里的东西输出
for(string s1;ss>>s1;cout<<s1<<endl);
return 0;
}
运行结果如下:
请输入