引言:今天工作遇到了一個需要按行讀取txt文件數據的需求,查詢了一下getline()函數,發現這竟然是一個C++的標準庫函數,而且設計的很好,特地做一下記錄。getline本質是一個定界流輸入截取函數,預設是換行符‘/n’ 個人技術博客(文章整理+源碼): https://zobolblog.gi ...
引言:今天工作遇到了一個需要按行讀取txt文件數據的需求,查詢了一下getline()函數,發現這竟然是一個C++的標準庫函數,而且設計的很好,特地做一下記錄。getline本質是一個定界流輸入截取函數,預設是換行符‘/n’
個人技術博客(文章整理+源碼): https://zobolblog.github.io/LearnWinAPI/
最終效果:
1.getline函數聲明
getline函數實際上是在兩個模塊都有實現,一個是string一個是istream,它們的用處都是一樣的,只是輸入的參數不太一樣。一個是char*一個是string。
std::istream::getline: istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim ); std::getline (string): istream& getline (istream& is, string& str); istream& getline (istream& is, string& str, char delim);
2.使用方法:
第一個std::istream::getline的使用,就是cin或者ifstream,調用成員函數的形式,cin.getline:
第1個參數s是承接的字元數組,大小必須大於等於獲得的數據長度。
第2個參數n,是s的最大長度,因為char*是得不到數組長度的,必須額外給出,防止記憶體訪問越界、
char name[256]; std::cin.getline(name, 256);
第二個std::getline (string),類似公共函數了,流的輸入也放到了參數列表中,因為string內部有動態長度設計,就不用額外給出了。
std::getline (std::cin,name);
char delim就是定界符號,預設是‘/n’換行符,也可以自己指定。getline會返回從起始,到定界符前的數據(不包括定界符本身,但流會經過定界符,相當於游標跳到定界符後面)。
3.官方網址:
國內的搜索檔案實在是太亂了,起始官方講的很好:
https://cplusplus.com/reference/istream/istream/getline/
https://cplusplus.com/reference/string/string/getline/
源碼:
#include <iostream> int main() { char name[256], title[256],web[256]; std::cout << "Please, enter your name: "; std::cin.getline(name, 256); std::cout << "Please, enter your tutorial : "; std::cin.getline(title, 256); std::cout << "Please, enter your tutorial : "; std::cin.getline(web, 256); std::cout << name << "'s tutorial is " << title << "'s web is "; return 0; }
效果:
本人個人技術博客: https://zobolblog.github.io/LearnWinAPI/ ,B站賬號:zobol,個人公眾號:zobol的魔法藏書室,技術討論群:811851762。所有源碼和文章均整理上傳其中,歡迎關註。