2016-11-07 3 views
2

просто для того, чтобы понять, как правильно читать, как я мог прочитать следующий текст из файла, если я хочу прочитать разные строки в каждой строке. Каждая линия может иметь различные размеры (первая линия может иметь 3 строки и вторая строка может иметь 100 строк)Прочитайте строки до конца строк

2 //Number of lines 
A AS BPST TRRER 
B AS BP 

Я пытался в своем коде что-то вроде этого, но я не знаю, как проверить, если программа это в конце концов, линии.

ifstream fich("thefile.txt"); 

fich >> aux; //Contain number of line 

for(int i=0;i<aux;i++){ //For each line 
    string line; 
    getline(fich, line); 

    char nt; //First in line it's always a char 
    fich >> nt; 

    string aux; 

    while(line != "\n"){ //This is wrong, what expression should i use to check? 
     fich >> aux; 
    //In each read i'll save the string in set 
    } 
} 

Таким образом, в конце концов, я хочу, что набор содержит: {{A,AS,BPST,TRRER} {B,AS,BP}}

Спасибо.

+0

Используйте ['std :: istringstream'] (http://en.cppreference.com/w/cpp/io/basic_istringstream) для разбора строки. –

+0

Полезное чтение: http://stackoverflow.com/questions/7868936/read-file-line-by-line/7868998#7868998 См. Вариант 2. – user4581301

ответ

2
while(line != "\n"){ //This is wrong, what expression should i use to check? 

Да, потому что '\n' был удален с помощью функции getline().

Использование std::istringstream легко разобрать произвольное количество слов до конца текущего line:

string aux; 
std::istringstream iss(line); 
while(iss >> aux) { 
    // ... 
} 

Также обратите внимание:

fich >> aux; //Contain number of line 

оставит вас с пустая строка, прочитанная с std::getline(), потому что в этом случае '\n' будет оставлен от этой операции (см. Using getline(cin, s) after cin для получения более подробной информации).

Смежные вопросы