8.23C++:I/O流及流类库、输出流、setiosflags操纵符(manipulator)、setprecision()操纵符、文件输出流、字符串输出流

1 I/O流及流类库

在这里插入图片描述
流类库的结构
在这里插入图片描述

2 输出流

ostream对象流到文本文件中;
ofstream可以将对象与文件关联起来;
ostringstream可以将对象与字符串关联起来。
在这里插入图片描述
在这里插入图片描述

setprecision()、setiosflags()、setw均在< iomanip >中
在这里插入图片描述

3 setiosflags操纵符(manipulator),字面:给ios流设置标识

参数ios_base::left是ios_base的静态常量,因此引用时必须包括ios_base::前缀

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main() {
	double values[] = { 1.23, 35.36, 653.7, 4358.24 };
	string names[] = { "Zoot", "Jimmy", "Al", "Stan" };
	for (int i = 0; i < 4; i++)
		cout << setiosflags(ios_base::left)//左对齐
		<< setw(6) << names[i]
		<< resetiosflags(ios_base::left) //取消左对齐 reset
		<< setw(10) << values[i] << endl;
	return 0;
}

在这里插入图片描述在这里插入图片描述
4 精度,setprecision()操纵符

在这里插入图片描述

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main() {
	double values[] = { 1.23, 35.36, 6424.346, 41231.343 };
	string names[] = { "AA", "BB", "CC", "DD" };
	cout << setiosflags(ios_base::scientific); //标志位科学计数法
	for (int i = 0; i < 4; i++) {
		cout << setiosflags(ios_base::left)
			<< setw(6) << names[i]
			<< resetiosflags(ios_base::left)
			<< setw(10) << setprecision(1) << values[i] << endl; //精度为1,由于设置了scientific,即小数保留1位
			//每次输出先设置宽度,再设置manipulator
	}
	return 0;
}
输出:
AA       1.2e+00
BB       3.5e+01
CC       6.4e+03
DD       4.1e+04

5 文件输出流:向二进制文件输出

文件输出流ofstream的对象可以把信息流到外部存储空间的文件中
在这里插入图片描述
在这里插入图片描述
①将内存中的一个结构体对象,按照其在内存中存储的二进制形式,直接写到磁盘中
一个类无法存储,故存储一个结构体.
四种强制类型转换,reinterpret_cast用于进行各种不同类型的指针之间、不同类型的引用之间以及指针和能容纳指针的整数类型之间的转换

#include <fstream>   //文件流
using namespace std;
struct Date {
	int mon, day, year;
};
int main() {
	Date dt = { 6, 12, 88 }; //顺序初始化struct
	ofstream file("date.dat", ios_base::binary); //创建文件输出流对象file
	//打开"data.dat"文件,指定二进制模式
	file.write(reinterpret_cast<char*>(&dt), sizeof(dt)); //调用文件输出流对象file的write函数,把内存中的内容写到文件输出流中
	//&dt为Date类型的地址,将其转换为指向字符的指针
	file.close();//关闭文件
	return 0;
}

6 字符串输出流:ostringstream

在这里插入图片描述
在这里插入图片描述
①将各类数据转换为字符串类型,注意是基本类型数据或重载了<<的数据类型

#include <sstream> //包含stringstream对象
#include <iostream>
#include <string>
using namespace std;
template <class T>
/*重载函数实例:将Point对象插入到字符串输出流的<<进行重载
ostringstream& operator << (ostringstream os, const &Point){
	os << Point.x;
	return os;
}
*/
string toString(const T& v) {  //返回值是string
	ostringstream os; //创建字符串输出流
	os << v; //v插入到字符串输出流中
	return os.str(); //注意要写os.str(),返回的是输出流生成的字符串
}
int main() {
	cout << toString(22) << endl;
	cout << toString(1.5) << endl;
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值