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++ 中的流操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10094.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt中正則表達式的用法

一.基本功能介紹&#xff1a; 在Qt中&#xff0c;可以使用QRegularExpression類來處理正則表達式。以下是一些常用的正則表達式用法&#xff1a; 1.創建正則表達式對象&#xff1a; QRegularExpression regex("pattern"); 2.匹配字符串&#xff1a; QString str …

LeetCode 2960.統計已測試設備:看測試了多少次

【LetMeFly】2960.統計已測試設備&#xff1a;看測試了多少次 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/count-tested-devices-after-test-operations/ 給你一個長度為 n 、下標從 0 開始的整數數組 batteryPercentages &#xff0c;表示 n 個設備的電池百分比…

【QEMU系統分析之實例篇(十七)】

系列文章目錄 第十七章 QEMU系統仿真的機器創建分析實例 文章目錄 系列文章目錄第十七章 QEMU系統仿真的機器創建分析實例 前言一、QEMU是什么&#xff1f;二、QEMU系統仿真的機器創建分析實例1.系統仿真的命令行參數2.配置加速器configure_accelerators()do_configure_icount…

藍橋杯13屆JAVA A組 國賽

??????? package 藍橋杯國賽; // 貪心選個數最少的進行擺 // 2:1 ,3:1, 4:1,5 : 3,6:3,7:1 // 選 1&#xff0c;7&#xff0c;4&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;9 // 然后都選滿10個 public class 火彩棒數字 {public static void main(String[] a…

【CTFHub】HTTP 請求方式 302跳轉 cookie WP

1.請求方式 打開給出的URL進入一個頁面&#xff0c;提示原方法是GET&#xff0c;用CTFHUB方法就能獲得flag 思路&#xff1a;抓包&#xff0c;將GET方法改成CTFHUB方法進行重新發送請求&#xff0c;查看響應情況 1.打開代理服務器 2.打開BurpSuite 刷新頁面獲得攔截 3.發送…

【Excel VBA】深入理解 VBA 中的 CallByName 函數

動態調用方法與屬性&#xff1a;深入理解 VBA 中的 CallByName 函數 昨天在介紹Choose函數在復雜的VBA應用程序開發中&#xff0c;有時我們需要根據運行時的情況來決定調用哪個對象的哪個方法或屬性。這種靈活性可以通過 CallByName 函數實現。在本篇博客中&#xff0c;田辛老…

網絡Http和Socket通訊(基于面試)

每日一句&#xff1a;想得到世上最好的東西&#xff0c;先得讓世界看到最好的你 目錄 面試問OSI或TCP/IP,怎么回答&#xff1f; 面試問HTTP&#xff1f; 面試問Get類型&#xff0c;Pot類型區別&#xff1f; 面試什么是Socket套接字&#xff1f; 面試問什么是數據粘包&…

qt for android 的架構原理

qt for android實現架構&#xff0c;分享這幾幅很不錯圖。來自于 《Qt 林斌&#xff1a;整合Android IVI平臺打造統一的Qt數字座艙體驗》 1.實現架構圖 2.qt for android能力 3.java 和 qt混合開發 4. AutoMotive

46寸硅片為什么要留平邊(flat)?

知 識星球&#xff08;星球名&#xff1a; 芯片制造與封測社區&#xff0c;星球號&#xff1a; 63559049&#xff09;里的學員問&#xff1a; 2&#xff0c; 4&#xff0c; 6寸硅片都有 平 邊&#xff0c;它們有什么作用 &#xff1f; 硅片的平邊&#xff08;Flat&…

經典權限五張表案例分析

文章目錄 模塊分析模塊分析 描述五張表的關系重要知識講解抽取成一個BaseServletSpringIOC思想(底層)實現代碼IOC概述 SPI機制(為學習框架做思想和技術鋪墊)SPI引入1. 標準/規范2. 具體的實現3. 調用 SPI介紹SPI練習JDBC4.0免注冊驅動原理Servlet實現方式三 ServletContainerIn…

idea使用前的全局配置,一次配置,多次使用

前提&#xff1a;每次導入一個新的項目&#xff0c;就需要重新設置編碼、maven、jdk、git版本等信息。實際每個項目所用到的配置信息是一致的&#xff0c;除非換一家公司&#xff0c;不然不會改動到這些內容。 idea版本&#xff1a;2024.1.1 1.1、全局Maven配置 IDEA啟動頁面…

微火一文盤點:為何全域運營系統會成為創業新風口?

當前&#xff0c;微火全域運營已經成為創業的新風口&#xff0c;想要做微火全域運營服務商的創業者數量日益增多。據目前了解到的最新消息&#xff0c;微火全域運營系統的市場占有率已經超過了48%&#xff0c;并且還在持續不斷地上漲中。 所謂微火全域運營系統&#xff0c;就是…

InLine Chat功能優化對標Github Copilot,CodeGeeX帶來更高效、更直觀的編程體驗!

VSCode中的CodeGeeX 插件上線InLine Chat功能后&#xff0c;收到不少用戶的反饋&#xff0c;大家對行內交互編程這一功能非常感興趣。近期我們針對這個功能再次進行了深度優化&#xff0c;今天詳細介紹已經在VSCode插件v2.8.0版本上線的 CodeGeeX InLine Chat功能&#xff0c;以…

藍橋杯成績已出

藍橋杯的成績早就已經出來了&#xff0c;雖然沒有十分驚艷 &#xff0c;但是對于最終的結果我是心滿意足的&#xff0c;感謝各位的陪伴&#xff0c;關于藍橋杯的刷題筆記我已經堅持更新了49篇&#xff0c;但是現在即將會告別一段落&#xff0c;人生即將進入下一個規劃。我們一起…

Spring框架學習筆記(一):Spring基本介紹(包含IOC容器底層結構)

1 官方資料 1.1 官網 https://spring.io/ 1.2 進入 Spring5 下拉 projects, 進入 Spring Framework 進入 Spring5 的 github 1.3 在maven項目中導入依賴 <dependencies><!--加入spring開發的基本包--><dependency><groupId>org.springframework<…

jni 返回二維byte數組

在JNI中返回二維byte數組&#xff0c;你需要在Java中準備一個相應的二維數組來接收這個返回值。在JNI層面&#xff0c;你可以創建一個二維的byte數組&#xff0c;并使用GetByteArrayRegion和SetByteArrayRegion來操作它。 以下是一個簡單的例子&#xff1a; public class Jni…

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能

基于STC12C5A60S2系列1T 8051單片機實現一主單片機與一從單片機進行雙向串口通信功能 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機串口通信介紹STC12C5A60S2系列1T 8051單片機串口通信的結構基于STC12C5A60S2系列1T 8051單片機串口通信的特殊功能寄存器…

QT---day5,通信

1、思維導圖 2、TCp 服務器 #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QTcpServer> #include <QList> #include <QTcpSocket> #include <QMessageBox> #include <QDebug> #include <QTcpServer> QT_B…

鐳速實現利用Libarchive實現高效、智能的文件傳輸和管理

在前一篇報道中&#xff0c;我們闡述了Libarchive這一開源庫的強大功能&#xff0c;它專門用于處理歸檔文件。通過整合Libarchive&#xff0c;鐳速在包括Windows和Linux在內的多個操作系統上提供了在線解壓縮服務&#xff0c;為企業構建了一個既強大又安全的文件傳輸系統&#…