一、基本介紹
c++ getline是一種用於從輸入流中獲取一行文本的函數。它具有靈活、易用的特點,可以支持多種輸入流類型,包括標準輸入、文件以及字符串等。該函數可以幫助程序員處理各種數據格式的輸入,是c++輸入輸出中一個使用頻率非常高的函數。
二、函數原型與參數
c++ getline函數的原型如下:
istream& getline (istream& is, string& str, char delim);
其中,istream表示輸入流類型,string表示存儲輸入文本的字符串變量,delim表示文本分隔符,通常為換行符,也可以自定義其他分隔符。
三、使用示例
1. 從標準輸入中讀取一行文本
#include #include using namespace std; int main() { string line; getline(cin, line); cout << "輸入的內容為:" << line << endl; return 0; }
運行程序後,程序會等待用戶輸入一行文本,然後把文本存放進line變量中,並輸出到控制台上。
2. 從文件中讀取多行文本
#include #include #include using namespace std; int main() { ifstream file("data.txt"); if (!file.is_open()) { cout << "文件打開失敗!" << endl; return 1; } string line; while(getline(file, line)) { cout << line << endl; } file.close(); return 0; }
該程序使用ifstream類型打開data.txt文件,並通過getline函數逐行讀取文件內容,並輸出到控制台上。
3. 使用分隔符獲取單詞
#include #include #include using namespace std; vector split(string str, char delim) { vector result; string word; stringstream ss(str); while (getline(ss, word, delim)) { result.push_back(word); } return result; } int main() { string sentence = "hello,world,i,am,your,friend!"; vector words = split(sentence, ','); cout << "分隔後的單詞為:" << endl; for (auto word : words) { cout << word << endl; } return 0; }
該程序使用自定義分隔符逐個獲取單詞,通過調用split函數,並將單詞存儲在vector容器中,最後輸出到控制台上。
四、常見問題
1. 如何避免讀取空行?
可以使用getline函數後判斷讀取的內容是否為空,如果為空,則說明讀取到了空行,可以使用continue語句繼續讀取下一行。
string line; while (getline(file, line)) { if (line.empty()) continue; }
2. 如何使用getline函數讀取空格?
getline函數默認以換行符為分隔符,如果需要讀取包含空格的文本,可以設置分隔符為空格:
string str; getline(cin, str, ' ');
這樣,就可以讀取到包含空格的文本字符串。
3. 如何更改getline函數的默認分隔符?
可以使用istream類的成員函數getline(char*, streamsize, char)來更改默認分隔符。例如,下面的示例將把’\n’替換為’;’符號:
#include #include using namespace std; int main(void) { char str[] = "A;B;C\nD;E;F\nG;H;I"; char *token; token = strtok(str, ";"); while (token != NULL) { cout << token << endl; token = strtok(NULL, ";"); } return 0; }
在該程序中,先使用c函數strtok將str分割為token,其分隔符為分號’;’,然後從中篩選需要的信息。
原創文章,作者:OZHM,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/142929.html