C ++ читает различные типы данных из файла, пока не появится строка, начинающаяся с числа - PullRequest
0 голосов
/ 28 марта 2019

В C ++ я хотел бы читать из входного файла, который содержит различные типы данных: сначала имя участника (2 или более строк с пробелами), затем идентификатор (строка без пробелов, всегда начинающаяся счисло), затем другие строки без ws и цифр (виды спорта и их достигнутые места).

Например:

Josh Michael Allen 1063Szinyei running 3 swimming 1 jumping 1

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

void ContestEnor::next()
{
    string line;
    getline(_f , line);
    if( !(_end = _f.fail()) ){
        istringstream is(line);
        is >> _cur.contestant >> _cur.id; // here I don't know how to go on
        _cur.counter = 0;
        //...
    }
}

Спасибо за вашу помощь заранее.

1 Ответ

0 голосов
/ 28 марта 2019

Вы должны использовать std::getline с разделителем.Таким образом, вы можете разделять символ пробела и читать до тех пор, пока не найдете строку, где находится первый символ числа.Вот пример короткого кода (кажется, что он довольно домашний, поэтому я не хочу писать слишком много для вас;):

std::string temp, id;

while (std::getline(_f, temp, ' ')) {
    if (temp[0] >= 0 && temp[0] <= '9') {
        id = temp;
    }
    // you would need to add more code for the rest of the data on that line
}

/* close the file, etc. */

Этот код должен быть достаточно понятен.Самая важная вещь, которую нужно знать, это то, что вы можете использовать std::getline, чтобы получить данные до разделителя.Разделитель используется, как и поведение по умолчанию при разделении символа новой строки.Таким образом, имя getline не совсем точное - вы все равно можете получить только часть строки, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...