我从一个标准输入流中抓取输入。比如,
1 2 3 4 5
或
1
2
3
4
5
我使用的是:
std::string in;
std::getline(std::cin, in);
但这只是抓住了换行符,对吗?我如何只使用iosteam、string和cstdlib来输入它们是用换行符还是空格分隔的?
发布于 2011-04-21 10:43:10
只需使用:
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)
...
}
发布于 2011-04-21 10:57:41
使用'q'
作为getline
的可选参数。
#include <iostream>
#include <sstream>
int main() {
std::string numbers_str;
getline( std::cin, numbers_str, 'q' );
int number;
for ( std::istringstream numbers_iss( numbers_str );
numbers_iss >> number; ) {
std::cout << number << ' ';
}
}
发布于 2011-04-21 10:45:37
std::getline( stream,到哪里?,定界符ie
std::string in;
std::getline(std::cin, in, ' '); //will split on space
或者,您可以读入一行,然后根据您希望的分隔符对其进行标记。
https://stackoverflow.com/questions/5738882
复制相似问题