std::getline
来自 cppreference.com
< cpp | string | basic string
定义在头文件 <string> 中 |
||
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(1) | |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(2) | (自 C++11 起) |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(3) | |
template< class CharT, class Traits, class Allocator > std::basic_istream<CharT, Traits>& |
(4) | (自 C++11 起) |
getline
从输入流中读取字符并将其放入字符串中
1) 调用 str.erase().
2) 从 input 中提取字符并将其追加到 str 中,直到发生以下情况之一(按列出顺序检查)
b) 下一个可用的输入字符是 delim,如 Traits::eq(c, delim) 所测试的那样,在这种情况下,分隔符字符将从 input 中提取,但不会追加到 str 中。
3,4) 与 getline(input, str, input.widen('\n')) 相同,即默认分隔符是换行符。
内容 |
[编辑] 参数
input | - | 要从中获取数据的流 |
str | - | 用于放置数据的字符串 |
delim | - | 分隔符字符 |
[编辑] 返回值
input
[编辑] 备注
当使用空格分隔的输入(例如 int n; std::cin >> n;)时,任何跟随的空格,包括换行符,都会保留在输入流中。然后,当切换到面向行的输入时,使用 getline
检索的第一行将只是该空格。如果这在很可能的情况下是意外行为,可能的解决方案包括
- 对
getline
进行显式多余的初始调用。 - 使用 std::cin >> std::ws 移除连续空格。
- 使用 cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 忽略输入行上的所有剩余字符。
[编辑] 示例
以下示例演示了如何使用 getline
函数读取用户输入,并使用 delim 参数逐行处理流,或逐部分处理行。
运行此代码
#include <iostream> #include <sstream> #include <string> int main() { // greet the user std::string name; std::cout << "What is your name? "; std::getline(std::cin, name); std::cout << "Hello " << name << ", nice to meet you.\n"; // read file line by line 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\n"; // use separator to read parts of the line std::istringstream input2; input2.str("a;b;c;d"); for (std::string line; std::getline(input2, line, ';');) std::cout << line << '\n'; }
可能的输出
What is your name? John Q. Public Hello John Q. Public, nice to meet you. The sum is 28. a b c d
[编辑] 缺陷报告
以下行为更改的缺陷报告被追溯应用到以前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
LWG 91 | C++98 | getline 的行为不像非格式化输入函数 |
行为类似于非格式化输入函数 |
[编辑] 另请参阅
提取字符直到找到给定字符 ( std::basic_istream<CharT,Traits> 的公有成员函数) |