当前位置: 首页 > news >正文

C++学习第二十七课:C++ 输入输出流详解:从基础到高级应用

在这里插入图片描述

在 C++ 中,流(stream)是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动,这些字节可以从一个地方流向另一个地方,例如从键盘输入到程序中,或者从程序输出到屏幕。C++ 提供了一套完整的流库来处理各种类型的输入和输出,包括文件 I/O、字符串处理等。本文将详细介绍 C++ 中使用流进行输入和输出的方法,并结合实际案例进行讲解。

一、输入输出流的基本概念

在 C++ 中,流是通过流对象来操作的。流对象是 std 命名空间中的类模板实例化得到的对象,主要包括 istreamostreamiostream 三种类型。其中,istream 用于输入操作,ostream 用于输出操作,而 iostream 是前两者的组合。

1.1 标准输入输出流对象

C++ 预定义了四个标准流对象,分别是 cincoutcerrclog。它们分别对应于标准输入、标准输出、标准错误和标准日志。

示例代码:

#include <iostream>int main() {// 使用 cout 输出一段文本std::cout << "Hello, World!" << std::endl;// 使用 cin 读取一个整数int x;std::cin >> x;std:cout << "You entered: " << x << std::endl;return 0;
}

二、格式化输入输出

C++ 提供了一些操纵符(manipulator)来控制输出格式,例如设置填充字符、对齐方式、宽度等。

2.1 设置输出格式

示例代码:

#include <iostream>
#include <iomanip>int main() {int num = 12345;// 设置宽度为 10,向右对齐,不足位用 '0' 补齐std::cout << std::setw(10) << std::right << std::setfill('0') << num << std::endl;// 设置宽度为 10,向左对齐,不足位用空格补齐std::cout << std::setw(10) << std::left << num << std::endl;// 设置输出为十六进制形式std::cout << std::hex << num << std::endl;return 0;
}

三、文件输入输出

C++ 的 fstream 库提供了用于文件操作的类,包括 ifstream(用于读取文件)、ofstream(用于写入文件)和 fstream(同时支持读写)。

3.1 文件打开与关闭

示例代码:

#include <fstream>
#include <iostream>int main() {// 以读模式打开文件std::ifstream infile("example.txt");if (!infile) {std::cerr << "Error opening file for reading." << std::endl;return 1;}// 以写模式创建或覆盖文件std::ofstream outfile("output.txt");if (!outfile) {std::cerr << "Error opening file for writing." << std::endl;return 1;}// 关闭文件infile.close();outfile.close();return 0;
}

案例:读写CSV文件

CSV(逗号分隔值)文件是一种常见的数据存储格式。使用C++流可以方便地读写CSV文件。

#include<fstream>
#include<sstream>
#include<vector>
#include<string>std::vector<std::vector<std::string>> readCSV(const std::string& filename) {std::vector<std::vector<std::string>> data;std::ifstream infile(filename);std::string line;while (std::getline(infile, line)) {std::istringstream iss(line);std::vector<std::string> row;std::string value;while (std::getline(iss, value, ',')) {row.push_back(value);}data.push_back(row);}return data;
}void writeCSV(const std::string& filename, const std::vector<std::vector<std::string>>& data) {std::ofstream outfile(filename);for (const auto& row : data) {for (size_t i = 0; i < row.size(); ++i) {outfile<< row[i];if (i < row.size() - 1) {outfile<< ",";}}outfile<< std::endl;}
}int main() {std::vector<std::vector<std::string>> data = readCSV("input.csv");writeCSV("output.csv", data);return 0;
}

四、字符串流

C++ 的 sstream 库提供了用于字符串操作的类,包括 istringstream(用于从字符串读取数据)、ostringstream(用于向字符串写入数据)和 stringstream(同时支持读写)。

4.1 字符串读写操作

示例代码:

#include <sstream>
#include <iostream>
#include <string>int main() {// 创建一个字符串流对象std::istringstream iss("Hello, World!");// 从字符串流中读取数据std::string word;while (iss >> word) {std::cout << word << std::endl;}// 向字符串流中写入数据std::ostringstream oss;oss << "Number: " << 42;std::string result = oss.str();std::cout << result << std::endl;return 0;
}

五、总结

通过本文的介绍,我们了解了 C++ 中使用流进行输入和输出的基本概念和方法。流是 C++ 中处理输入输出的重要工具,它提供了一种灵活且高效的方式来处理不同类型的数据。在实际编程中,我们需要根据具体需求选择合适的流对象和操作方法,以便更好地完成输入输出任务。希望本文能够帮助大家更好地理解和掌握 C++ 中的流操作。

相关文章:

C++学习第二十七课:C++ 输入输出流详解:从基础到高级应用

在 C 中&#xff0c;流&#xff08;stream&#xff09;是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动&#xff0c;这些字节可以从一个地方流向另一个地方&#xff0c;例如从键盘输入到程序中&#xff0c;或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…...

【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用

预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境...

Nginx - 配置文件结构(一)

安装Nginx 以 Ubuntu 为例&#xff0c;安装命令为 sudo apt install nginx常用指令 # 检查配置文件是否有问题 nginx -t# 热加载配置文件 nginx -s reload# 等待处理完当前请求并退出 nginx -s quit# 快速退出 nginx -s stop目录结构 nginx 默认安装位置一般在 /etc/nginx …...

暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法

暗区突围是一款高拟真硬核射击手游&#xff0c;打造了全新的沉浸式暗区战局体验&#xff0c;发行商是腾讯公司。这个游戏名词虽然看起来有些陌生&#xff0c;但其本身的玩法内核毫无疑问的是&#xff0c;这款游戏在画面质量和枪械操作方面&#xff0c;都是手游市场上同类游戏中…...

基于FPGA的视频矩阵 视频拼接 无缝切换解决方案

视频矩阵 视频矩阵 视频拼接 无缝切换 1. 最大支持144路HDMI视频输入&#xff0c;最大支持144路路HDMI输出&#xff0c;完全交叉切换。 2. 与包括1080p/60的所有HDTV分辨率和高达1920*1200的PC的分辨率兼容&#xff1b; 3. 支持HDMI 1.3a、HDCP 1.3、HDCP 1.4、以及DVI 1.0协…...

LeetCode 513.找树左下角的值

LeetCode 513.找树左下角的值 1、题目 题目链接&#xff1a;513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null…...

redis分片java实践、redis哨兵机制实现、redis集群搭建

redis分片java实践 linux安装redishttps://mp.csdn.net/mp_blog/creation/editor/134864302复制redis.conf配置文件成redis1.conf、redis2.conf、redis3.conf 修改redis的端口信息和存pid文件的路径。存pid文件的路径只要不同就行了&#xff0c;没什么特别要求。 指定配置文件…...

2024年四千价位段最具统治力的投影仪,坚果N1S 4K: 4K+三色激光=下一代4K

更高的亮度与分辨率、更强的对比度、更广的色域、更低的价格&#xff0c;家用智能投影企业在性能和价格上加速内卷。作为该领域的龙头和“卷王之王”&#xff0c;坚果投影率先将激光投影仪的价格拉入万元内&#xff0c;近期其又祭出一把杀手锏——坚果N1S 4K。该产品是首款4000…...

MySQL8.3升级踩坑记录

之前用的mysql5.7&#xff0c;目前被省公司发现有漏洞&#xff0c;需要升级mysql8.3&#xff0c;无奈只好升级&#xff0c;记录下踩坑经过 1、安装完以后设置环境变量&#xff0c;网上操作一大堆&#xff0c;以便于方便使用client 2、双击client 登录&#xff0c;开启远程访问…...

你写的每条SQL都是全表扫描吗

你写的每条SQL都是全表扫描吗&#xff1f;如果是&#xff0c;那MySQL可太感谢你了&#xff0c;每一次SQL执行都是在给MySQL上压力、上对抗。MySQL有苦难言&#xff1a;你不知道索引吗&#xff1f;你写的SQL索引都失效了不知道吗&#xff1f;慢查询不懂啊&#xff1f;建那么多索…...

每日两题 / 24. 两两交换链表中的节点 25. K 个一组翻转链表(LeetCode热题100)

24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 定义三个指针&#xff0c;交换前先保存ntnt指针为next->next&#xff0c;cur和next两个节点&#xff0c;然后将pre->next指向next 若pre为空&#xff0c;说明当前交换的节点为头两个节点&#xff0c;…...

【Linux】模拟实现bash(简易版)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…...

C++ | Leetcode C++题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; class Solution { public:string addBinary(string a, string b) {string ans;reverse(a.begin(), a.end());reverse(b.begin(), b.end());int n max(a.size(), b.size()), carry 0;for (size_t i 0; i < n; i) {carry i < a.siz…...

如何确保UDP文件传输工具有最低稳定的传输速度?

在当前日新月异的数字时代背景下&#xff0c;文件传输工具已经成为我们日常生活与工作中不可或缺的一部分&#xff0c;尤其针对那些频繁涉及即时数据交互与多媒体流通的场景。 UDP协议&#xff0c;以其突出的高速传输与低延迟特性&#xff0c;脱颖而出成为众多用户的首选。不过…...

力扣爆刷第133天之动态规划收尾(距离编辑与回文子串)

力扣爆刷第133天之动态规划收尾&#xff08;距离编辑与回文子串&#xff09; 文章目录 力扣爆刷第133天之动态规划收尾&#xff08;距离编辑与回文子串&#xff09;一、72. 编辑距离二、647. 回文子串三、516. 最长回文子序列 一、72. 编辑距离 题目链接&#xff1a;https://l…...

List集合中对asList的使用

List<String> sArrays.asList(“qwe”,”cvb”,”mnb”); List<String> s1s.subList(1,2); System.out.Pintln(“s”);//输出结果&#xff1a;[qwe,cvb,mnb] System.out.Pintln(“s1”);//输出结果&#xff1a;[cvb] s1.add(“123qwe”);//报错&#xff1a;java…...

软件测试所有测试方法

β测试_Beta测试 β测试&#xff0c;英文是Beta testing。又称Beta测试&#xff0c;用户验收测试&#xff08;UAT&#xff09;。 β测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场&#xff0c;Beta测试不能由程序员或测试员完成。 …...

linux 下 /usr/local的作用

在Linux系统中&#xff0c;/usr/local目录扮演着特定的角色&#xff0c;它是为用户自安装的软件提供一个标准位置。以下是/usr/local目录的主要用途和特点&#xff1a; 用户级程序目录&#xff1a;该目录用于存放用户自行编译安装的软件或者第三方应用程序&#xff0c;区别于操…...

【web网页制作】html+css旅游家乡河南开封主题网页制作(4页面)【附源码】

HTMLCSS家乡河南主题网页目录 &#x1f354;涉及知识&#x1f964;写在前面&#x1f367;一、网页主题&#x1f333;二、页面效果Page1 首页Page2 开封游玩Page 3 开封美食Page4 留言 &#x1f308; 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 &#x1f40b;四…...

MySQL用命令行导出数据库

问题&#xff1a; 交作业的时候要求交数据文件&#xff0c;因为用的MySQL数据库&#xff0c;就在想怎么用命令行导出数据库&#xff0c;在csdn上找了其他文章&#xff0c;使用MySQL的命令行用下面语句&#xff0c;结果发生报错 mysqldump -u 用户名 -p 数据库名 > 输出地址…...

Ultimate ASI Loader深度解析:构建Windows游戏插件生态系统的技术实践

Ultimate ASI Loader深度解析&#xff1a;构建Windows游戏插件生态系统的技术实践 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ul…...

AI图像增强:让模糊照片重获新生的实用工具

AI图像增强&#xff1a;让模糊照片重获新生的实用工具 【免费下载链接】Real-ESRGAN-GUI Lovely Real-ESRGAN / Real-CUGAN GUI Wrapper 项目地址: https://gitcode.com/gh_mirrors/re/Real-ESRGAN-GUI 在数字时代&#xff0c;我们每个人的手机相册里都藏着珍贵的回忆—…...

UE5.0.3打包Linux报错?手把手教你搞定BlueprintJson插件缺失问题

UE5.0.3 Linux打包报错终极指南&#xff1a;BlueprintJson插件问题的深度解析与实战修复 当你满怀期待地在UE5.0.3中点击"打包Linux"按钮&#xff0c;却看到屏幕上弹出关于BlueprintJson插件的红色错误信息时&#xff0c;那种挫败感我深有体会。作为一名经历过无数次…...

SketchUp STL插件:5个简单步骤实现3D打印工作流革命

SketchUp STL插件&#xff1a;5个简单步骤实现3D打印工作流革命 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是否曾为Sk…...

UE5新手避坑:用C++实现关卡切换和字符串处理,别再复制粘贴了

UE5 C实战避坑指南&#xff1a;关卡切换与字符串处理的高效实践 刚接触UE5 C开发的程序员们&#xff0c;是否经常遇到关卡切换不生效、字符串比较结果诡异、GetAllActorsOfClass导致性能骤降等问题&#xff1f;本文将深入剖析这些典型陷阱&#xff0c;带你从底层机制理解正确做…...

Dan Koe: 如果你有多重兴趣,请不要浪费接下来的2-3年

本文整理自 Dan Koe 原文。Dan Koe 是 YouTube、X 等平台拥有数百万粉丝的个人成长领域创作者&#xff0c;以"一人公司"理念、深度内容创作和高效 AI 工作流著称。你是否曾因为无法只专注一件事而感到自责&#xff1f; 你学设计&#xff0c;又想学编程&#xff1b;读…...

新手避坑指南:PX4飞控连接TFmini、LIDAR Lite V3等定高雷达的完整接线与参数配置(QGC实操)

PX4飞控与定高雷达实战&#xff1a;从接线到参数配置的避坑指南 刚拿到PX4飞控和一堆传感器的新手们&#xff0c;面对密密麻麻的接口和参数设置&#xff0c;是不是有种无从下手的感觉&#xff1f;特别是当你需要连接定高雷达时&#xff0c;不同品牌&#xff08;北醒TFmini、LID…...

简单介绍C语言中的字符串函数

1.首先给出字符分类函数这几个就简单过一下&#xff0c;不做重点说明。这两个为字符转换函数&#xff0c;顾名思义&#xff0c;没什么好介绍的&#xff1b;接下来简单介绍几个字符串函数&#xff1a;strlen.strcpy.strcat.strstr.strncpy.strncat.memcpy.memmove;strlen:求字符…...

Apache Flink Agents 0.2.1版本发布,亮点几何?

Apache Flink社区宣布发布 Apache Flink Agents 0.2 系列的首个缺陷修复版本 0.2.1&#xff0c;包含3项缺陷和漏洞修复及小幅改进&#xff0c;还基于此构建了演示项目。版本发布情况Apache Flink社区很高兴地推出了 Apache Flink Agents 0.2.1 版本。此版本是 0.2 系列的首个缺…...

ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光

第一章&#xff1a;ZGC停顿时间为何突然飙升&#xff1f;3个被90%团队忽略的配置雷区曝光 ZGC&#xff08;Z Garbage Collector&#xff09;以亚毫秒级停顿著称&#xff0c;但生产环境中频繁出现 10–50ms 甚至更高停顿&#xff0c;往往并非内存压力所致&#xff0c;而是源于几…...