IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++IO流 -> 正文阅读

[C++知识库]C++IO流

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

流类体系:

流对象:

流运算符:>><<
输入输出流:

ostream类

cout

cerr

clog

字符类的处理:

1.正常操作

2.调用成员函数的方式

格式控制字符

头文件<iomanip>

常用的格式控制,一种是调用成员函数的方式,一种是控制字符去做

设置有效位数:setprecision(int n)

设置精度需要 fixed结合setprecision()使用

istream类 cin

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
void testOstream() {
	//重定向fropen()
	cout << "标准输出" << endl;		//可重定向
	cerr << "标准错误输出" << endl;//不可重定向
	clog << "标准错误输出" << endl;//可以重定向为文件
}
	
	void testB() {
		//格式控制字符
		double p = 34.12341;
		cout << "设置有效位数" << setprecision(4) << p << endl;
		cout << "设置有效小数位数" << fixed << setprecision(4) << p << endl;
		//cout.precision(4);所有流控制字符都会对应一个成员函数的方式
		//进制输出
		cout << hex << 32 << endl;//十六进制
		cout << oct << 15 << endl;//八进制
		cout << setbase(10)<< 7 << endl;//
		//setw()制表位,默认右对齐
		//cout.with()
		cout << setiosflags(ios::left);//右对齐iOS::right
		cout << setw(8) << "123" << setw(8) << "2131" << setw(8) << 213412 << endl;
		cout << setw(8) << "123" << setw(8) << "2131" << setw(8) << 213412 << endl;
	}

int main() {
	//freopen("1.txt", "r", stdin);
	//int a, b;
	//scanf("%d%d", &a, &b);//输入由文件完成
	//freopen("2.txt", "w", stdout);//输出由文件完成
	//cout << a + b << endl;
	//字符类处理
	//处理一个字符可以用put,可以通过io流对象调用成员函数
	//cout.put('a');
	//cout << 'a' << endl;
	//char c = 'C';
	//cout.put(c);
	//cout << c << endl;
	//cout.write("Iloveyou", 4);//指定输出长度
	输入
	/*c = cin.get();
	cout.put(cin.get());*/
	//while (getchar() != '\n');
	//char str[20]="";
	//cin.getline(str, 20);
	//cout.write(str, 20);
	testB();
	return 0;
}

字符流:

头文件:sstream

子类、(一般用stringstream类对象即可)

istringstream类

ostringstream类

获取字符流对象中的数据

string str()//获取string

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

一般字符流对象做字符串处理

字符串的分割

字符串的转换

#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
//21,1234,453,345,54,12,2,4354按逗号分割

void teststringstream() {
	//构建字符流对象,以及获取字符流对象中数据
	stringstream sso(string("Iloveyou"));
	stringstream ssnull;
	ssnull << "我爱你!";
	//错误写法stringstream ss = string("Imissyou");
	cout << sso.str() << endl;//流对象调用成员函数
	cout << ssnull.str() << endl;
	string data;
	ssnull >> data;
	cout << data << endl;
	//ssnull.clear()二次操作要做clear
	cout << ssnull.str() << endl;
	//转换
	//数字转字符串
	int num = 1234;
	char input[20] = "";
	stringstream transs(input);
	transs << num;
	transs >> input;
	cout << input << endl;
	cout << "---" << endl;
	transs.clear();
	transs << num;
	transs >> input;
	cout << input << endl;
	stringstream snum("35463124");
	int nnum = 0;
	snum >> nnum;
	cout << nnum << endl;
	//分割
	stringstream sData("21,1234,453,345,54,12,2,4354");

	int numdata[8];
	char signal[7];

	for (int i = 0; i < 8; i++) {
		if (i == 7) {
			sData >> numdata[i];
		}else
		sData >> numdata[i] >> signal[i];
		
	}
	for (int i = 0; i < 8; i++) {
		
		cout << numdata[i] << " ";
	}
	cout << endl;
	//多次对同一个数据流做数据操作,一定要做clear()操作	 
	

}

int main() {
	teststringstream();
	char str[20];
	int num;
	scanf_s("%d%s", &num, str,20);//对比C语言是用格式化控制字符%d%s来判断,C++字符流对象相当于字符流的一个缓冲区
	cout << num << " " << str << endl;
	return 0;
}

文件流:

流类体系

头文件<fstream>

ofstream类:用这个类去创建对象只能做谢操作不能做读操作。

ifstream类:只读操作

fstream类:可读可写

打开文件:void open(const char*URL,ios::openmode mode){}

读写方式:ios::in(读的方式打开,不具备创建功能)ios::out(写的方式打开,具备创建功能)

ios::app(追加模式,具有创建功能)ios::ate(打开已有文件,文件指针指向文件末尾,不具有创建功能)?ios::trunc(具备创建功能)ios::nocreate(不创建)? ios::noreplace(不替换)ios::binary(二进制形式)

组合方式:用的是位或

可读可写可创建:ios::in|ios::out|ios::trunc

二进制可读可写可创建:ios::in|ios::out|ios::trunc|ios::binary

判断文件是否打开成功:

1.用文件重载的流对象运算符

file.open("2.txt", ios::out);
?? ?if (!file) {
?? ??? ?cout << "文件打开失败" << endl;
?? ??? ?return;
?? ?}

2.is_open成员函数判断,返回true表示打开成功,返回false表示失败

关闭文件:void.close();

读写文件

1.以流的方式读写

2.以二进制方式读写

把string写到文件中去不能直接实现,要先转换为char*

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
//void testOpenFile() {
//	fstream file;
//	file.open("2.txt", ios::out);
//	if (!file) {
//		cout << "文件打开失败" << endl;
//		return;
//	}
//	file.close();
//}
//void asciiRWFile(const char* readFileName, const char* writeFileName) {
//	fstream read(readFileName, ios::in);
//	fstream write(writeFileName, ios::out);
//	//成员函数eof()判断是否在文件末尾
//	//1.流的方式读写
//	//空格和换行会被忽略
//	/*while (1) {
//	
//		char key;
//		read >> key;
//		if (read.eof()) {
//			break;
//		}
//		write << key;
//
//	}*/
//	//1.2成员函数方式
//	/*while (1) {
//		char key;
//		read.get(key);
//		if (read.eof()) {
//			break;
//		}
//		write.put(key);
//	}*/
//	//
//	
//	while (!read.eof()) {
//		char str[1024] = "";
//		read.getline(str, 1024);
//		
//		write.fstream::write(str, strlen(str));
//		write.put('\n');
//	}
//	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 buf[1024] = "";
		readFile.read(buf, 1024);
		writeFile.write(buf, 1024);
	}

	readFile.close();
	writeFile.close();
}


int main() {
	//asciiRWFile("read.txt","write.txt");
	//testOpenFile();
	binaryRWFile("br.txt", "bw.txt");
	return 0;
}

文件指针定位

ifstream类的对象

istream& seekg(long int pos);

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

ofstream类的对象

ostream& seekp(long int pos)

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

ios_base::seekdir

ios::beg文件开始位置(类似c语言的SEEK_SET)

ios::end文件结束位置

ios::cur文件当前位置

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
void tsetSeekRead(const char* fileName) {
	fstream fread(fileName, ios::in);
	if (!fread) {
		cout << "打开文件失败" << endl;
	}
	fread.seekg(4);
	char key = fread.get();
	cout << key << endl;
	fread.seekg(-4, ios::end);
	key = fread.get();
	cout << key << endl;
	fread.close();
}

int main() {
	tsetSeekRead("1.txt");


	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:32:36  更:2021-12-11 15:32:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:24:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码