共用方式為


getline 範本函式

從輸入資料流一行一行地擷取字串。

// (1) delimiter as parameter template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(     basic_istream<CharType, Traits>& is,     basic_string<CharType, Traits, Allocator>& str, CharType delim);  template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(     basic_istream<CharType, Traits>&& is,     basic_string<CharType, Traits, Allocator>& str, const CharType delim);  // (2) default delimiter used template<class CharType, class Traits, class Allocator> basic_istream<CharType, Traits>& getline(     basic_istream<CharType, Traits>& is,     basic_string<CharType, Traits, Allocator>& str);  template<class Allocator, class Traits, class Allocator> basic_istream<Allocator, Traits>& getline(     basic_istream<Allocator, Traits>&& is,     basic_string<Allocator, Traits, Allocator>& str); 

參數

  • is
    要擷取字串的輸入資料流。

  • str
    要從輸入資料流讀取字元的字串。

  • delim
    行的分隔符號。

傳回值

輸入資料流 is。

備註

標記為 (1) 的一對函式簽章,會從 is 擷取字元,直到找到 delim,並將字元儲存在 str 中。

標記為 (2) 的一對函式簽章,會使用新行做為預設之行的分隔符號,並表現 getline(is, str, is.widen('\n'))。

每對的第二個函式是第一個函式的類比,以支援 rvalue 參考

當發生下列其中一項時,會停止擷取:

  • 在檔案結尾,is 的內部狀態旗標設定為 ios_base::eofbit。

  • 函式擷取比較為相等於 delim 的元素之後,不放回元素,也不附加到受控制序列。

  • 函式擷取 str.max_size 元素之後,is 的內部狀態旗標設定為 ios_base::failbit。

  • 這些以外的其他錯誤先前已列出,其中 is 的內部狀態旗標設定為 ios_base::badbit。

如需有關內部狀態旗標的資訊,請參閱 ios_base::iostate

如果函式沒有擷取任何元素,is 的內部狀態旗標會設定為 ios_base::failbit。 在任何情況下,getline 會傳回 is。

如果擲回例外狀況,is 和 str 會處於有效狀態。

範例

下列程式碼示範兩種模式的 getline():第一個使用預設的分隔符號 (新行),第二個使用空白做為分隔符號。 檔案結尾字元 (鍵盤上的 Ctrl-Z 鍵) 用來控制 while 迴圈的終止。 這會將 cin 的內部狀態旗標設定為 eofbit,它必須使用 basic_ios::clear() 清除,第二個 while 迴圈才能正常運作。

// compile with: /EHsc /W4
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    string str;
    vector<string> v1;
    cout << "Enter a sentence, press ENTER between sentences. (Ctrl-Z to stop): " << endl;
    // Loop until end-of-file (Ctrl-Z) is input, store each sentence in a vector.
    // Default delimiter is the newline character.
    while (getline(cin, str)) {
        v1.push_back(str);
    }

    cout << "The following input was stored with newline delimiter:" << endl;
    for (const auto& p : v1) {
        cout << p << endl;
    }

    cin.clear();

    vector<string> v2;
    // Now try it with a whitespace delimiter
    while (getline(cin, str, ' ')) {
        v2.push_back(str);
    }

    cout << "The following input was stored with whitespace as delimiter:" << endl;
    for (const auto& p : v2) {
        cout << p << endl;
    }
}

輸出

                            

需求

標頭:<string>

命名空間: std

請參閱

參考

basic_string 類別

<string>