次の方法で共有


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) としてマークされた関数シグネチャのペアが、delim が検出されるまで is から文字を抽出し、それらを str に格納します。

(2) としてマークされた関数シグネチャのペアが、既定行の区切り文字として改行文字を使用し、getline(is, str, is.widen('\n')) として動作します。

各ペアの 2 つ目の関数では、1 つ目の関数と同様に、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 は引き続き有効な状態になります。

使用例

次のコードは、2 つのモードの getline() を示しています。1 つ目は既定の区切り文字 (改行文字)、2 つ目は区切り文字として空白文字を使用しています。 また、while ループの終了を制御するために、ファイル終端文字 (Ctrl + Z キー) を使用しています。 この文字により、内部状態フラグ cin が eofbit に設定されます。2 つ目の while ループを正常に動作させるには、このフラグを basic_ios::clear() でクリアする必要があります。

// 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>