std::getline
定义于头文件 <string>
|
||
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input, |
(1) | |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>&& input, |
(1) | (C++11 起) |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input, |
(2) | |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>&& input, |
(2) | (C++11 起) |
getline
从输入流读取字符并将它们放进 string :
input
释出字符并后附它们到 str
,直至发生下列条件之一(按顺序检查):delim
,以 Traits::eq(c, delim) 测试,该情况下从 input
释出分隔字符,但不后附它到 str
。目录 |
[编辑] 参数
input | - | 获取数据来源的流 |
str | - | 放置数据的目标 string |
delim | - | 分隔字符 |
[编辑] 返回值
input
[编辑] 注意
立即在空白符分隔输入后使用时,例如在 int n; std::cin >> n; 后, getline
会用 operator>> 消耗掉留在输入流上的换行符,并立即返回。常用解决方案是在切换到面向行输入前,用 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 忽略输入行上所有剩下的字符。
[编辑] 示例
下列代码演示如何用 getline
函数读取用户输入以及如何逐行处理文件。
#include <string> #include <iostream> #include <sstream> int main() { // 问候用户 std::string name; std::cout << "What is your name? "; std::getline(std::cin, name); std::cout << "Hello " << name << ", nice to meet you.\n"; // 逐行读文件 std::istringstream input; input.str("1\n2\n3\n4\n5\n6\n7\n"); int sum = 0; for (std::string line; std::getline(input, line); ) { sum += std::stoi(line); } std::cout << "\nThe sum is: " << sum << "\n"; }
可能的输出:
What is your name? John Q. Public Hello John Q. Public, nice to meet you. The sum is 28
[编辑] 参阅
释出字符,直至找到给定字符 ( std::basic_istream 的公开成员函数)
|