C++中的IO流

                         流:若干字节的数据从一端到另一端

                         流类体系:输入输出流,字符流,文件流

                         流运算符:<<     >>

输入输出流:

ostream类cout,cerr, clog,字符类的处理,格式控制字符包含iomanip

常用格式控制:成员函数方式,流控制字符

设置有效位数:setprecision(n)

设置精度:fixed结合setprecision(n)使用

istream类cin

#include <iostream>
#include <iomanip>
using namespace std;
void testOstream()
{//freopen()
	cout << "标准输出" << endl;//可重定向
	cerr << "标准错误输出" << endl;//不能重定向
	clog << "标准错误输出" << endl;//重定向为文件
	//字符类的处理
	cout.put('A');
	char c = 'C';
	cout.put(c);
	cout.write("kjsbfwoqeih", 8);//指定长度输出
	cout.put(cin.get());
	while (cin.get() != '\n')
	{
		char str[10] = "";
		cin.getline(str, 10);
		cout.write(str, 10);
	}
    //格式控制
	double PI = 3.1415926;
	cout << setprecision(4) << PI << endl;//设置有效位数4位,输出为3.141
	cout << fixed << setprecision(4) << PI << endl;//4位有效小数位
	//进制输出
	cout << hex << 99 << endl;
	cout << oct << 99 << endl;
	cout << setbase(8) << 16 << endl;//setbase设置进制
	//设置左对齐
	cout << setiosflags(ios::left);
}

字符流:

头文件:sstream

istringstream类

ostringtream类

获取字符流对象中的数据

  string str()获取string

void str(const string&str)重新设置字符流对象的数据

字符串分割,转换


#include <iostream>
#include <sstream>
using namespace std;

void teststringtream()
{
	//构建字符流对象,获取字符流对象中的数据
	stringstream sso(string("ojsfho"));
	cout << sso.str() << endl;
	stringstream ssnul;
	ssnul << "kjfoo";
	cout << ssnul.str() << endl;
	ssnul << "osdhf";
	ssnul.str("");//清除
	ssnul.clear();
	//数字转字符串
	int num = 1234;
	char input[20] = "";
	stringstream transs(input);
	transs << num;
	transs >> input;
	cout << input << endl;
	//字符串转数字
	stringstream snum("12456");
	int temp = 0;
	snum >> temp;
	cout << temp << endl;
	//分割
	stringstream sData("23,58,659,265,65,324,56");
	int data[7];
	char cData[6];
	for (int i = 0; i < 6; i++)
	{
		if (i == 5)
			sData >> data[i];
		else
			sData >> data[i] >> cData[i];
	}
	for (int i = 0; i < 6; i++)
	{
		cout << data[i] << endl;
	}
}

文件流

流类体系:

    ofstream:写的操作  output输出到文件

    ifstream :读操作

    fstream:可读可写    包含头文件<fstream>

打开关闭文件

void open(const char*URL,ios::openmode mode);

    读写方式:ios::in           读的形式打开文件

                      ios::out         写的方式打开文件,具有创建功能

                      ios::app        追加模式,具有创建功能

                      ios::ate         打开已有文件,文件指针指向末尾,不具创建功能

                      ios::truns      具有创建功能

                      ios::nocreat  不具有创建功能

                      ios::noreplace   不替换

                      ios::binary     二进制方式

            读写方式组合:

                      可读可写ios::in|ios::out|ios::truns        就是了解一下这个|

            判断文件是否打开成功

                     用文件流对象重载的运算

                     is_open成员函数判断

                                   true打开成功false打开失败

void close()

读写文件

   流的方式读写

   二进制方式读写

文件指针定位

 ifstream类的对象

     istream&seekg(long int pos);

     istream&seekg(long int pos,ios_base::seekdir position);

stream类的对象

     ostream&seekp(long int pos)

     ostream&seekp(long int pos,ios_base::seekdir position);

ios_base::seekdir

      ios::beg     文件开始位置

      ios::end      文件结束位置

      ios::cur        文件当前位置

#include <iostream>
#include <fstream>
using namespace std;

void testOpenfile()
{
	fstream file;//创建一个对象
	file.open("1.txt", ios::app);
	if (!file)
	{
		cout << "文件打开失败" << endl;
		return;
	}
	file.close();
}
void asciiRead(const char* readFileName, const char* writeFileName)
{
	fstream read(readFileName, ios::in);
	fstream write(writeFileName, ios::out);
	//流的方式读写
	while (!read.eof())
	{
		char key;
		read >> key;
		write << key;
	}
	read.close();
	write.close();
}
void binaryRWFile(const char* readFileName, const char* writeFileName)
{
	fstream readFile(readFileName, ios::in|ios::binary);
	fstream writeFile(writeFileName, ios::out|ios::binary);
	while (!readFile.eof())
	{
		char str[1024] = "";
		readFile.read(str, 1024);
		writeFile.write(str, 1024);
	}
	readFile.close();
	writeFile.close();
}
void testSeekRead(const char* fileName)
{
	fstream file;
	if (!fread)
	{
		cout << "打开文件失败" << endl;
	}
	char key = fread.get();
	cout << key;
	fread.seek(4,ios::beg);
	key = fread.get();
	cout << key;
	fread.seek(-4, ios::end);
	key = fread.get();
	cout << key << endl;
    fread.close();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值