C++IO流
2021/12/8 22:46:45
本文主要是介绍C++IO流,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++IO流
文章目录
- C++IO流
- 一、IO流
- 二、输入输出流
- 二、字符流
- 三、文件流
一、IO流
流:若干字节数据从一端到另一端叫做流,数据的流动
流类体系
- 流对象
- 流运算符>> <<
二、输入输出流
- ostream类
- cout
- cerr
- clog
- cin
- 字符类的处理
- 正常的操作
- 调用成员函数的方法
- 格式控制符
- 包含头文件iomanip
- 常用的格式控制,一种是调用成员函数方式,一种流控制字符去做
- 设置有效位数:setprecision(n)
- 设置精度:fixed结合setprecision使用
- istream 类 cin
#include <iostream> #include <iomanip> #include <cstdio> #include <string> using namespace std; void testOstream() //output { //freopen() cout << "标准输出" << endl; //重定向 cerr << "标准错误输出" << endl; //不能重定向 clog << "标准错误输出" << endl; //重定向为文件 //字符类的处理 cout.put('a'); cout << 'a' << endl; char c = 'C'; cout.put(c); cout << c << endl; cout.write("onetwothree", 5); //指定长度,超过长度不做输出 cout << endl; //输入 cout.put(cin.get()); cout << endl; //字符串 while (cin.get() != '\n'); while (getchar() != '\n'); char str[20]=""; cin.getline(str, 20); cout.write(str,20); } void testiomanip() { //格式控制符 //设置格式 double pi = 34.12343; cout << "设置有效位数:" << setprecision(4) << pi <<endl; cout << "有效小数位"<< fixed << setprecision(4) << pi << endl; // cout.precision(4); 所有的流控制符都会对应一个成员函数的方式 //进制输出 cout << hex << 32 << endl; //十六进制 cout << oct << 15 << endl; //八进制输出 cout << setbase(8) << 16 << endl; //8-16 //默认右对齐 //cout.with(8) //cout << resetiosflags << endl; cout << setiosflags(ios::left); //ios::right cout << setw(8) << "123" << setw(8) << "12345" << setw(8) << "3444" << endl; cout << setw(8) << "123" << setw(8) << "12345" << setw(8) << "3444" << endl; } int main() { //testOstream(); testiomanip(); /*freopen("1.txt","r",stdin); int a, b; scanf("%d%d", &a, &b); cout << a + b << endl;*/ while (1); return 0; }
运行结果:
二、字符流
- 用的头文件是::sstream类
- istringstream类
- ostringstream类
- 一般用的是stringstream类对象即可
- 获取字符流对象中的数据
- string str() //获取string
- void str(const string& str); 重新设置字符流对象的数据
- 一般字符流对象做字符串处理
- 字符串分割
- 字符串转换问题
#include <iostream> #include <sstream> using namespace std; //23,132,3443,54,54,65 void teststringstream() { //构建字符流对象,以及获取字符流对象中的数据 stringstream sso(string("onetwothree")); cout << sso.str() << endl; stringstream ssnull; ssnull << "aaaa" << endl; cout << ssnull.str() << endl; //错误 //stringstream ss=string("bbbbb"); string data; ssnull >> data; cout << data << endl; ssnull.str("bbbb"); //ssnull.clear(); cout<<ssnull.str() << endl; //字符串与数字之间的转换 //字符串转数字 int num = 1234; char input[20] = ""; stringstream transs(input); transs << num; transs >> input; cout << input << endl; //数字转字符串 stringstream snum("12345"); int temp = 0; snum >> temp; cout << temp << endl; //分割 stringstream sData("23,132,3443,54,54,65"); int numdata[6]; char cData[5]; for (int i = 0; i < 6; i++) { if (i == 5) { sData >> numdata[i]; } else sData >> numdata[i] >> cData[i]; } for (int i = 0; i < 6; i++) { cout << numdata[i] << " "; } cout << endl; //多次对同一个流做数据转换操作,一定做clear操作 transs.clear(); //做重置操作 transs << num; transs >> input; cout << input << endl; } int main() { teststringstream(); while (1); return 0; }
运行结果:
三、文件流
- 流泪体系
- ofstream类 写操作 output输出到文件
- ifstream类 读操作
- fstream类 可读可写 用的时候包含头文件 #include
- 打开关闭文件
- 打开文件:void open(sonst char *URL,ios::openmode mode);
- 读写的方式是
- ios::in 读的方式打开文件
- ios::out 写方式打开文件 具有创建功能
- ios::app 追加模式 具有在创建功能
- ios::ate 追加模式,文件指针指向末尾
- ios::trunc 具备创建功能
- ios::nocreate 不具备创建
- ios::noreplace 不替换(类似C语言文件操作w方式)
- ios::binary 二进制的形式
- 读写的组合方式用的是
- 可读可写: ios::in|ios::out|ios::trunc
- 二进制的可读可写可创建: ios::in|ios::out|ios::trunc|ios::binary
- 判断打开文件是否成功
- 用文件流对象重载的运算
- is_open成员函数判断
- 返回ture 打开成功
- 返回false 打开失败
- 关闭文件:void:void close()
- 打开文件:void open(sonst char *URL,ios::openmode mode);
- 读写文件
- 流的方式读写
- 二进制方式读写
- 把string写到文件
- 需要先转换为char* 再写进去
- 文件指针定位
- istream类的对象
- 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);
- iosbase::seekdir
- ios::beg 文件开始位置 //SEEK_SET
- ios::end 文件结束位置
- ios::cur 文件当前位置
- istream类的对象
#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 asciRWFile(const char* readFileName, const char* writeFileName) { fstream read(readFileName, ios::in); fstream write(writeFileName, ios::out); /*成员函数 eof() 在文件末尾 1.流的方式读写 1.1 空格和换行会被忽略*/ /*while (1) { char key; read >> key; if (read.eof()) { break; } write << key; } while (1) { char key; read.get(key); write.put(key); if (read.eof()) break; write.put(key); }*/ char str[1024] = ""; while (!read.eof()) { 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 str[1024] = ""; readFile.read(str, 1024); writeFile.write(str, 1024); } readFile.close(); writeFile.close(); } void testSeekRead(const char* fileName) { fstream fread(fileName, ios::in); if (!fread) { cout << "打开文件失败" << endl; } char key = fread.get(); cout << key; fread.seekg(4,ios::beg); key = fread.get(); fread.seekg(-4,ios::end); key = fread.get(); cout << key<< endl; fread.close(); } int main() { testOpenFile(); asciRWFile("read.txt","write.txt"); binaryRWFile("br.txt","bw.txt"); testSeekRead("test.txt"); while (1); return 0; }
运行结果:
asciRWFile(“read.txt”,“write.txt”)
binaryRWFile(“br.txt”,“bw.txt”)
testSeekRead(“test.txt”)
这篇关于C++IO流的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器