读取由空格或换行符分隔的输入...?

新手上路,请多包涵

我正在从标准输入流中获取输入。如,

 1 2 3 4 5

或者

1
2
3
4
5

我在用着:

 std::string in;
std::getline(std::cin, in);

但这只是抓住了换行符,对吗?如何仅使用 iosteam、字符串和 cstdlib 获取输入是否由换行符或空格分隔?

原文由 user618712 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 347
2 个回答

只需使用:

 your_type x;
while (std::cin >> x)
{
    // use x
}

operator>> 默认会跳过空格。您可以链接事物以一次读取多个变量:

 if (std::cin >> my_string >> my_number)
    // use them both

getline() 在一行中读取所有内容,返回它是否为空或包含数十个空格分隔的元素。如果您提供可选的替代分隔符 ala getline(std::cin, my_string, ' ') 它仍然不会做您想要的,例如标签将被读入 my_string

可能不需要这样做,但是您可能很快就会感兴趣的一个相当常见的要求是读取单个换行符分隔的行,然后将其拆分为组件…

 std::string line;
while (std::getline(std::cin, line))
{
    std::istringstream iss(line);
    first_type first_on_line;
    second_type second_on_line;
    third_type third_on_line;
    if (iss >> first_on_line >> second_on_line >> third_on_line)
        ...
}

原文由 Tony Delroy 发布,翻译遵循 CC BY-SA 3.0 许可协议

只需使用:

字符串线;

获取线(cin >> ws,线);

它在这里描述: https ://www.geeksforgeeks.org/problem-with-getline-after-cin/

原文由 David Schmid 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题