c++ getline

一、基本介紹

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
OZHM的頭像OZHM
上一篇 2024-10-14 18:43
下一篇 2024-10-14 18:43

相關推薦

  • C++ getline函數詳解

    一、getline函數的概述 getline函數是流輸入輸出庫中的一個函數,其主要作用是從指定的流中讀取一行字符,將其存放到一個字符串變量中,並返迴流對象,以便可以使用流對象進行更…

    編程 2025-04-12
  • 詳解getline頭文件

    一、fgets頭文件 fgets頭文件是一個經典的C語言輸入輸出函數,其定義如下: #include <stdio.h> char *fgets(char *str, …

    編程 2024-12-01

發表回復

登錄後才能評論