流:若干字节的数据从一端到另一端
流类体系:输入输出流,字符流,文件流
流运算符:<< >>
输入输出流:
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();
}