c++中的兩種getline用法詳解
getline是C++標(biāo)準(zhǔn)庫函數(shù);但不是C標(biāo)準(zhǔn)庫函數(shù),而是POSIX(IEEE Std 1003.1-2008版本及以上)所定義的標(biāo)準(zhǔn)庫函數(shù)(在POSIX IEEE Std 1003.1-2008標(biāo)準(zhǔn)出來之前,則只是GNU擴(kuò)展庫里的函數(shù))。getline會(huì)生成一個(gè)包含一串從輸入流讀入的字符的字符串,直到以下情況發(fā)生會(huì)導(dǎo)致生成的此字符串結(jié)束:1)到文件結(jié)束,2)遇到函數(shù)的定界符,3)輸入達(dá)到最大限度。
getline()函數(shù)是一個(gè)比較常見的函數(shù)。根據(jù)名字直接"望文->生義",就知道這個(gè)函數(shù)是來完成讀入一行數(shù)據(jù)。
下面就對(duì)C++ -- getline()函數(shù)的用法說明,以及getline()函數(shù)作為while條件的問題,總結(jié)一下:
在C++中本質(zhì)上有兩種getline函數(shù),(稱為第一種)一種在頭文件<istream>中,是istream類的成員函數(shù)。
好了,看正文,給大家詳細(xì)介紹。
功能:讀入一行數(shù)據(jù)。
c++中有2種getline函數(shù),一種在頭文件 <istream> 中,是istream類的成員函數(shù);另一種是在頭文件 <string> 中,是普通函數(shù)。
1.在頭文件 <istream> 的getline函數(shù)兩種重載形式:
istream& getline (char* s, streamsize n );//讀取最多n個(gè)字符保存在s對(duì)應(yīng)的數(shù)組中,即使大小不夠n, istream& getline (char* s, streamsize n, char delim ); //讀取最多n個(gè)字符保存在s對(duì)應(yīng)的數(shù)組中,遇到delim,或者讀完一行,或字?jǐn)?shù)達(dá)到限制則終止
特別說明: 最多讀取n個(gè)字符中結(jié)束字符算一位。
例子代碼:
// istream::getline example
#include <iostream> // std::cin, std::cout
int main () {
char name[256], title[256];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256);
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);
std::cout << name << "'s favourite movie is " << title;
return 0;
}
通過字?jǐn)?shù)限制修改的代碼:

通過設(shè)置終止字符使用getline函數(shù)的代碼:

關(guān)于這個(gè)函數(shù)的2點(diǎn)疑問:
第一點(diǎn),當(dāng)定義一個(gè)小的數(shù)組,輸入的時(shí)候要求輸入的長度超出數(shù)組長度,輸出的時(shí)候會(huì)輸出全部的值。
#include<iostream>
int main()
{
char name[5];
std::cin.getline(name,25);
std::cout<<name<<std::endl;
return 0;
}
結(jié)果:

第二點(diǎn),代碼如下
// istream::getline example
#include <iostream> // std::cin, std::cout
int main () {
char name[6], title[256];
std::cout << "Please, enter your name: ";
std::cin.getline (name,4);
//代碼通過字?jǐn)?shù)限制存入數(shù)組后就不再運(yùn)行11-12行代碼,而是直接16行
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256,'#');
std::cout<<std::endl;
std::cout << name << " " << title;
return 0;
}

2.在頭文件<string>中的getline函數(shù)
(1) istream& getline (istream& is, string& str, char delim); istream& getline (istream&& is, string& str, char delim); (2) istream& getline (istream& is, string& str); istream& getline (istream&& is, string& str);
說明:
- is:表示一個(gè)輸入流,例如 cin。
- str:用來存儲(chǔ)輸入流中的信息
- delim:自定義結(jié)束字符,默認(rèn)是 '\n '
例子代碼:
#include<iostream>
#include<string>
int main()
{
std::string name; //這里定義的是string類型,而不是char
std::getline(std::cin,name);
std::cout<<name<<std::endl;
return 0;
}
getline在while語句中作為判定條件:
不設(shè)置終止符
#include<iostream>
#include<string>
using namespace std;
int main()
{
string name;
while(getline(cin,name))
{
cout<<name<<endl;
}
return 0;
}
使用終止符的while語句(當(dāng)輸入 ' \n ' 也不受影響)
#include<iostream>
#include<string>
using namespace std;
int main()
{
string name;
while(getline(cin,name,'#'))
{
cout<<"輸出結(jié)果:"<<endl;
cout<<name<<endl;
}
return 0;
}
結(jié)果:

參考鏈接:
總結(jié)
以上所述是小編給大家介紹的c++中的兩種getline用法詳解,希望對(duì)大家有所幫助,也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解C++?OpenCV實(shí)現(xiàn)圖像拼接的原理及方法
本文以實(shí)現(xiàn)圖像拼接為目標(biāo),把分割開的圖像進(jìn)行拼接還原,核心的內(nèi)容包括:OpenCV圖像拼接相關(guān)原理以及OpenCV圖像拼接案例的實(shí)現(xiàn),感興趣的可以了解一下2022-07-07
深入剖析Android中init進(jìn)程實(shí)現(xiàn)的C語言源碼
這篇文章主要介紹了Android中init進(jìn)程實(shí)現(xiàn)的C語言源碼,init屬性服務(wù)在安卓中屬于系統(tǒng)的底層Linux服務(wù),需要的朋友可以參考下2015-07-07
C語言的getc()函數(shù)和gets()函數(shù)的使用對(duì)比
這篇文章主要介紹了C語言的getc()函數(shù)和gets()函數(shù)的使用對(duì)比,從數(shù)據(jù)流中一個(gè)是讀取字符一個(gè)是讀取字符串,需要的朋友可以參考下2015-08-08
C語言強(qiáng)制類型轉(zhuǎn)換規(guī)則實(shí)例詳解
強(qiáng)制類型轉(zhuǎn)換是把變量從一種類型轉(zhuǎn)換為另一種數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關(guān)于C語言強(qiáng)制類型轉(zhuǎn)換的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
C++實(shí)現(xiàn)判斷字符串是否回文實(shí)例解析
這篇文章主要介紹了C++實(shí)現(xiàn)判斷字符串是否回文,其中采用了數(shù)據(jù)結(jié)構(gòu)中棧以及過濾字符等技術(shù),,需要的朋友可以參考下2014-07-07

