1.分类

输入流输出流输入输出流

2.输入输出类关系图

C++ 输入流、输出流、输入输出流_c/c

图片来自`cplusplus.com`

3.输入输出的理解

数据进入程序,为输入;数据流出程序,为输出。或者说,数据从外存(硬盘)进入内存,为输入,数据从内存流出只外存(硬盘等),为输出。
比如:

(1)文件流

ifstream为输入文件流,对象为a,存放硬盘某路径数据文件,将数据流入string对象b,这个过程为读文件,即输入。
ofstream为输出文件流,对象为a,打开硬盘某路径空数据文件,string对象b流出至空数据文件,这个过程为写文件,即输出。
fstream为输入输出文件流,既可以输入,又可以输出,即打开一个文件,可进行读与写操作。

(2)字符流

对应上述文件流,分别为istringstreamostringstreamstringstream
常用的为stringstream,既可输入又可输出。
比如

	string str("my name is hht");
	stringstream ss;
	ss << str;//输出,这里将整个字符串输出
	string sa;
	ss >> sa;//输入,输入时遇到空格或制表符停止,这里sa为my
	         //执行完后,ss中内容为"name is hht"
	cout << sa.c_str() << endl;//输出my
	ss >> sa;
	cout << sa.c_str() << endl;//输出name

(3)cin、cout

cin为istream对象,从键盘输入数据至某一对象;
cout为ostream对象,从某一对象输出只屏幕。

4.getline(cin,str,’,’)

第一个参数可以为cin,表示从键盘读入数据至str中,只读取逗号前面的,比如,键盘输入"hello,hht",回车,则str内容为"hello"。
也可以从输入字符串流中读,比如

	istringstream iss("hello,hht");//或者stringstream
	string str;
	getline(iss, str, ',');//str为"hello",iss中为"hht"
	cout << str.c_str();

	getline(iss, str, ',');//str为"hht",iss中为空
	cout << str.c_str();

:如果不加第三个参数,则将整个输入流中的数据读入str。