Подтвердить что ты не робот

Читать ввод, разделенный пробелами или символами новой строки...?

Я захватываю входные данные из стандартного потока ввода. Например,

1 2 3 4 5

или

1
2
3
4
5

Я использую:

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

Но это просто хватит до новой строки, правильно? Как я могу получить входные данные, независимо от того, разделены ли они пробелом (-ами) строки или строки, используя только iosteam, string и cstdlib?

4b9b3361

Ответ 1

Просто используйте:

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

Ответ 2

Используйте '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

Ответ 3

std:: getline (поток, где to?, разделитель то есть

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

или вы можете прочитать в строке, а затем обозначить ее на основе любого разделителя, который вы хотите.

Ответ 4

Пользователь, нажимая клавишу 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];
}

Ответ 5

#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;
}

Ответ 6

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

Это будет считаться со стандартного ввода, если оно разделено пробелом или разделено по строке.