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>