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

use*_*712 19 c++ input

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

1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

要么

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

我正在使用:

std::string in;
std::getline(std::cin, in);
Run Code Online (Sandbox Code Playgroud)

但这只是抓住换行符,对吗?如何使用iosteam,string和cstdlib将它们分隔为换行符或空格?

Ton*_*roy 28

只需使用:

your_type x;
while (std::cin >> x)
{
    // use x
}
Run Code Online (Sandbox Code Playgroud)

operator>>默认会跳过空格.你可以链接东西一次读取几个变量:

if (std::cin >> my_string >> my_number)
    // use them both
Run Code Online (Sandbox Code Playgroud)

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)
        ...
}
Run Code Online (Sandbox Code Playgroud)


Pot*_*ter 5

使用'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 << ' ';
    }
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/I2vWl