• 字符串流与文件操作——(学习笔记)



    🚘正片开始

    字符串流

    字符串流需要包含 头文件#include ,字符串流可以做到

    1. 字符串数据的转换
    2. 字符串的分割

    头文件:#include

    void main()
    {
    	stringstream object("我是大帅比"); //用此类创建对象并赋值
    	cout << object.str();		//输出我是大帅比 返回的是string类的对象
    	//下面两种输出我是大帅比,返回的是const char*类型
    	const char* s=	object.str().data(); 
    	const char* s=	object.str().c_str();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    清空对象内部的字符串

    void main()
    {
    	stringstream object("我是大帅比");
    	cout << object.str(); //这里打印我是大帅比
    	object.str("");  //这里清空
    	cout << object.str(); //这里啥都不打印
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1.1 数据转换成字符串
    
    void main()
    {
    	stringstream stream;
    	int num = 123456;
    	char str[20] = { 0 };
    	
    	stream << num; //将数字输入到对象内
    	stream >> str; //再由对象输到str数组
    	cout << str;	//打印字符串123456
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1.2 字符串转换成数据
    void main()
    {
    	char str[25] = "3.14";
    	stringstream stream(str);
    	double num;
    	stream >> num; //将字符串3.14输入到num
    	cout << num;  //打印3.14
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2. 字符串分割
    int main()
    {
    	string str = "姓名: 张三 年龄: 18 性别: 男";
    	stringstream stream(str);
    	string tmp;
    	char name[25] = { 0 };
    	int age=0;
    	char sex[25] = {0};
    	stream >> tmp >> name >> tmp >> age >> tmp >> sex;
    	cout << name << " " << age << " " << sex << endl; //张三 18 男
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    文件操作

    了解相关的文件操作的函数

    1. 对象.get():每次获取文件的单个字符并返回其ASCLL码值
    2. 对象.getline():每次获取文件中一行字符并且忽略换行符
    3. 对象.put():每次写入文件一个字符
    4. 对象.eof():判断是否到达文件结束标志,没有到则返回0,到了则返回-1,此函数一般与上面三个函数结合使用
    5. 对象.is_open():此函数可以判断文件是否打开失败,打开失败返回0,成功返回非0
    6. 对象.fail():如果打开失败返回非0,成功返回0

    问:

    1. 如何将字符串写到文件中,又如何将文件的字符串读到程序中?
    2. 如何将带有格式的数据写到文件中,又如何读出来?
    3. 如何使用二进制读写?

    👇接下来我会逐个解答

    ✍将字符串写到文件中

    	fstream out("string.txt", ios::out);
    	if (!out.is_open())
    	{
    		printf("写的方式打开失败");
    		return;
    	}
    	string name = "abcd\nefghd\nqqqqq";
    	for (auto c : name)
    	{
    		out.put(c); //put()只能传字符
    	}
    	out.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    📖将字符串读出来有两种方式

    1. 用对象访问get()函数读取
    	fstream i("string.txt", ios::in);
    	if (!i) //判断文件是否打开失败 如果打开失败i返回0    
    	{
    		printf("读的方式打开失败\n");
    		return;
    	}
    	//开始读取
    	while (!i.eof()) //判断是否达到文件结束标志
    	{
    		char c = i.get();
    		cout <<c;
    	}
    	i.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. 用对象访问getline()函数读取
    /*
    string.txt内部数据
    abcd
    efgh
    defr
    */
    
    fstream read("string.txt", ios::in);
    if (!read) //判断文件是否打开失败 如果打开失败i返回0    
    {
    	printf("读的方式打开失败\n");
    	return;
    }
    //开始读取
    char arr[255] = { 0 }; //读出来放到这里
    while (!read.eof()) //判断是否达到文件结束标志
    {
    	read.getline(arr, 255);
    	cout << arr;
    }
    //最终输出的结果是abcdefghdefr,很明显getline()忽略了换行符
    read.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    ✍将有格式的数据写到文件中

    用流的方式写入

    struct Player
    {
    	char name[25];
    	char sex[25];
    	int age;
    	char pos[25];
    };
    
    	Player Info[3] = { {"张三","男",18,"天津"},{"李四","男",20,"北京"},{"王五","男",22,"四川"} };
    fstream out("info.txt", ios::out);
    if (!out)
    {
    	printf("写的方式打开文件失败\n");
    	return;
    }
    for (auto v : Info)
    {
    	out << v.name << "\t" << v.sex << "\t" << v.age << "\t" << v.pos << endl;
    }
    	out.close(); //关闭文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    📖将文件的数据读出

    用流的方式流出

    struct Player
    {
    	char name[25];
    	char sex[25];
    	int age;
    	char pos[25];
    };
    
    //读
    fstream i("info.txt", ios::in);
    if (!i)
    {
    	printf("读的方式打开文件失败\n");
    	return;
    }
    Player data[3] = { 0 };
    for (auto& v : data)
    {
    	i >> v.name >> v.sex >> v.age >> v.pos;
    }
    i.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ✍用二进制的方式写入

    struct Player
    {
    	char name[25];
    	char sex[25];
    	int age;
    	char pos[25];
    };
    
    Player Info[3] = { {"张三","男",18,"天津"},{"李四","男",20,"北京"},{"王五","男",22,"四川"} };
    fstream out("info.txt", ios::out|ios::binary); //用二进制的方式需要加入二进制模式ios::binary
    if (!out)
    {
    	printf("写的方式打开文件失败\n");
    	return;
    }
    out.write((char*)Info, sizeof(Info));
    
    out.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    📖用二进制的方式读出

    fstream i("info.txt", ios::in|ios::binary);
    if (!i)
    {
    	printf("读的方式打开文件失败\n");
    	return;
    }
    Player data[3] = { 0 };
    i.read((char*)data, sizeof(data));
    
    i.close();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    🎉完结

  • 相关阅读:
    [经典面试题]JS的typeof和instanceof区别
    商汤绝影发布车路协同平台,“车-路-云”一体打造安全高效的交通环境
    mysql中遇到查询字段的别名与函数冲突问题
    使用CSS的Positions布局打造响应式网页
    3D 沙盒游戏之人物的点击行走移动
    PHP8中伪变量“$this->”和操作符“::”的使用-PHP8知识详解
    java使用了未经检查或不安全的操作。的解决方法
    【Docker】Docker简介_运行原理
    使用一个文件集中管理你的 Nuget 依赖版本号
    Linux系统下rar软件的安装以及如何解压文件
  • 原文地址:https://blog.csdn.net/xiao_yi666/article/details/136589627