【C++】IO流

发布时间:2024年01月16日

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:折纸花满衣
🏠个人专栏:题目解析
🌎推荐文章:【LeetCode】winter vacation training

在这里插入图片描述


👉🏻c++IO流

C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类

在这里插入图片描述
C++标准库提供了4个全局流对象cin、cout、cerr、clog,使用cout进行标准输出,即数据从内
存流向控制台(显示器)。使用cin进行标准输入即数据通过键盘输入到程序中,同时C++标准库还
提供了cerr用来进行标准错误的输出,以及clog进行日志的输出,从上图可以看出,cout、
cerr、clog是ostream类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不
同。

🥗 Tips:

  1. cin为缓冲流。键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿。如果一次输
    入过多,会留在那儿慢慢用,如果输入错了,必须在回车之前修改,如果回车键按下就无法
    挽回了。只有把输入缓冲区中的数据取完后,才要求输入新的数据。
  2. 输入的数据类型必须与要提取的数据类型一致,否则出错。出错只是在流的状态字state中对
    应位置位(置1)
    ,程序继续。
  3. 空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输
    入。但如果是字符型和字符串,则空格(ASCII码为32)无法用cin输入,字符串中也不能有
    空格。回车符也无法读入。
  4. cin和cout可以直接输入和输出内置类型数据,原因:标准库已经将所有内置类型的输入和
    输出全部重载了

istream类型对象转换为逻辑条件判断值

istream& operator>> (int& val);
explicit operator bool() const;

实际上我们看到使用while(cin>>i)去流中提取对象数据时,调用的是operator>>,返回值是
istream类型的对象,那么这里可以做逻辑条件值,源自于istream的对象又调用了operator
bool,operator bool调用时如果接收流失败,或者有结束标志,则返回false。

👉🏻C++文件IO流

C++提供了丰富的文件操作功能,通过文件IO流(File IO Stream)可以实现对文件的读取和写入操作。C++中常用的文件IO流包括输入流(ifstream)、输出流(ofstream)和输入输出流(fstream)。

下面是一些常见的文件IO操作示例:

1. 读取文件内容:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream inputFile("example.txt"); // 打开文件

    if (!inputFile) {
        std::cerr << "Failed to open file." << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(inputFile, line)) { // 逐行读取文件内容
        std::cout << line << std::endl; // 输出每一行的内容
    }

    inputFile.close(); // 关闭文件

    return 0;
}

2. 写入内容到文件:

#include <iostream>
#include <fstream>

int main() {
    std::ofstream outputFile("example.txt"); // 打开文件

    if (!outputFile) {
        std::cerr << "Failed to open file." << std::endl;
        return 1;
    }

    outputFile << "Hello, World!" << std::endl; // 写入内容到文件

    outputFile.close(); // 关闭文件

    return 0;
}

3. 读取和写入文件:

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::fstream file("example.txt", std::ios::in | std::ios::out); // 打开文件

    if (!file) {
        std::cerr << "Failed to open file." << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(file, line)) { // 逐行读取文件内容
        std::cout << line << std::endl; // 输出每一行的内容
    }

    file.seekp(0, std::ios::end); // 移动写入位置到文件末尾
    file << "New line" << std::endl; // 写入新内容到文件末尾

    file.close(); // 关闭文件

    return 0;
}

👉🏻stringstream

C++ 的 stringstream 是一个类,它可以将字符串作为流进行处理。stringstream 提供了对字符串的输入和输出操作,让我们可以像对待标准输入输出流一样对字符串进行读写。

使用 stringstream 前需要包含头文件 <sstream>

下面是 stringstream 的一些常见用法:

1. 字符串到其他类型的转换:

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string str = "123";
    int num;
    
    std::stringstream ss(str); // 将字符串 str 绑定到 stringstream 对象 ss
    
    ss >> num; // 将字符串转换为整数
    
    std::cout << "Number: " << num << std::endl;

    return 0;
}

在上述示例中,我们将字符串 “123” 绑定到 stringstream 对象 ss,并使用 >> 运算符将字符串转换为整数。

只有字符串才可以绑定在stringstream上,也只有字符串想转换为其它类型时,才绑定在stringstream上,然后由stringstream通过流提取符号>>,从stringstream流中提取刚刚绑定的字符串赋值给新的变量。

2. 类型到字符串的转换:

#include <iostream>
#include <sstream>
#include <string>

int main() {
    int num = 123;
    std::stringstream ss;
    
    ss << num; // 将整数转换为字符串

    std::string str = ss.str(); // 获取转换后的字符串
    
    std::cout << "String: " << str << std::endl;

    return 0;
}

在上述示例中,我们使用 << 运算符将整数 num 转换为字符串,并通过 ss.str() 方法获取转换后的字符串。

3. 分割字符串:

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

int main() {
    std::string str = "apple,banana,cherry";
    std::vector<std::string> tokens;
    
    std::stringstream ss(str); // 将字符串 str 绑定到 stringstream 对象 ss
    std::string token;
    char delimiter = ',';
    
    while (std::getline(ss, token, delimiter)) { // 使用 getline() 函数分割字符串
        tokens.push_back(token);
    }
    
    for (const auto& t : tokens) {
        std::cout << t << std::endl;
    }

    return 0;
}

在上述示例中,我们使用 std::getline() 函数和 stringstream 对象 ss 分割字符串 str,并将分割后的子串存储到 vector 容器中。

stringstream 提供了一种方便的方式来处理字符串,可以进行类型转换、字符串拼接、字符串分割等操作。通过使用 stringstream,我们可以更灵活地处理字符串数据。


如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹?? 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长

在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/cefler/article/details/135628638
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。