C++ string類getline()用法實(shí)例詳解
有時(shí)候我們希望在最終的字符串中保留輸入時(shí)的空白符,這時(shí)候應(yīng)該用getline函數(shù)來替代原來的>>運(yùn)算符。( cin 不能輸入包含嵌入空格的字符串)
getline函數(shù)的參數(shù)是一個(gè)輸入流和一個(gè)string對(duì)象,原型是:getline(cin,string對(duì)象)
,函數(shù)從給定的輸入流中讀入內(nèi)容,直到遇到換行符為止,但是此時(shí)的換行符要被讀入,然后把所讀入的內(nèi)容存到string對(duì)象中,但此時(shí)不存入最后那個(gè)換行符。
在<string>
中的getline
函數(shù)有四種重載形式:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
讀取的istream是作為參數(shù)is傳進(jìn)函數(shù)的,讀取的字符串保存在string類型的str中。
函數(shù)的變量:
- is :表示一個(gè)輸入流,例如 cin。
- str :string類型的引用,用來存儲(chǔ)輸入流中的流信息。
- delim :char類型的變量,所設(shè)置的截?cái)嘧址?/strong>;在不自定義設(shè)置的情況下,遇到’\n’,則終止輸入。
getline只要遇到換行符就停止讀入并且返回string對(duì)象,哪怕一開始輸入就是換行符也是如此,只不過會(huì)返回一個(gè)空的string對(duì)象。和輸入運(yùn)算符一樣,getline也會(huì)返回它的流參數(shù),所以可以用getline的結(jié)果作為條件。
//參考代碼 #include<iostream> #include<string> using namespace std; int main() { string line;//每次讀入一整行,直到遇到換行符結(jié)束讀入 while (getline(cin,line)) if (!line.empty()) cout << line << endl; system("pause"); return 0; }
分析一下while(getline(cin,line))
(注意:這里默認(rèn)回車符停止讀入,按Ctrl+Z(Windows)(Ctrl+D(Linux))
即可退出循環(huán)。)
這個(gè)語句中,while判斷語句的真實(shí)判斷對(duì)象是cin的狀態(tài),也就是判斷當(dāng)前是否存在有效的輸入流。
而輸入流是對(duì)象,判斷的是流返回的狀態(tài)。所以正常的情況下,你怎么輸入都是跳不出它的循環(huán)。
在這之中可能會(huì)用些人誤以為while判斷語句的判斷對(duì)象是line(也就是line是否為空),想通過回車來跳出循環(huán),卻發(fā)現(xiàn)不能跳出循環(huán)。
而回車和設(shè)置的終止符都是終止getline()函數(shù)的讀取操作的。但是while判斷語句判斷的是getline()函數(shù)的輸入流是否有效。
到此這篇關(guān)于C++ string類getline()用法詳解的文章就介紹到這了,更多相關(guān)C++ string類getline()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解C++中public、protected及private用法
這篇文章主要介紹了C++中public、protected及private用法,對(duì)于C++面向?qū)ο蟪绦蛟O(shè)計(jì)來說是非常重要的概念,需要的朋友可以參考下2014-08-08linux c 獲取本機(jī)公網(wǎng)IP的實(shí)現(xiàn)方法
本篇文章是對(duì)在linux中使用c語言獲取本機(jī)公網(wǎng)IP的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++利用socket傳輸大文件的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了C/C++如何使用socket傳輸大文件的實(shí)現(xiàn)代碼,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2023-10-10C++學(xué)習(xí)之如何進(jìn)行內(nèi)存資源管理
與java、golang等自帶垃圾回收機(jī)制的語言不同,C++并不會(huì)自動(dòng)回收內(nèi)存,這往往會(huì)導(dǎo)致內(nèi)存泄漏和內(nèi)存溢出等問題,所以掌握C++中的內(nèi)存管理技巧和工具是非常重要的,本文就來和大家詳細(xì)講講2023-05-05