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

时间:2011-04-21 02:34:24

标签: c++ input

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

1 2 3 4 5

1
2
3
4
5

我正在使用:

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

但这只是抓住换行符,对吗?如何使用iosteam,string和cstdlib将它们分隔为换行符或空格,我怎样才能获得输入?

6 个答案:

答案 0 :(得分:28)

只需使用:

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)
        ...
}

答案 1 :(得分: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 << ' ';
    }
}

http://ideone.com/I2vWl

答案 2 :(得分:1)

std :: getline(stream,where to?,delimiter 即

std::string in;
std::getline(std::cin, in, ' '); //will split on space

或者您可以在一行中阅读,然后根据您希望的分隔符对其进行标记。

答案 3 :(得分:1)

用户按Enter或空格是相同的。

int count = 5;
int list[count]; // array of known length
cout << "enter the sequence of " << count << " numbers space separated: ";
// user inputs values space separated in one line.  Inputs more than the count are discarded.
for (int i=0; i<count; i++) {
    cin >> list[i];
}

答案 4 :(得分:0)

#include <iostream>

using namespace std;

string getWord(istream& in) 
{
    int c;

    string word;

    // TODO: remove whitespace from begining of stream ?

    while( !in.eof() ) 
    {

        c = in.get();

        if( c == ' ' || c == '\t' || c == '\n' ) break;

        word += c;
    }

    return word;
}

int main()
{
    string word;

    do {

        word = getWord(cin);

        cout << "[" << word << "]";

    } while( word != "#");

    return 0;
}

答案 5 :(得分:0)

int main()
{
    int m;
    while(cin>>m)
    {
    }
}

如果空格分隔或分隔线,则从标准输入读取。