Как использовать getline и извлечь определенные части строки c ++ - PullRequest
0 голосов
/ 10 ноября 2018

, поэтому у меня есть текстовый файл с содержанием:

title
#comment 1
given
#comment 2
second given
#comment 3
1 2 3 4 5 6 7 8 9
#row 1
11 12 13 14 15 16 17 18 19 
#comment 4
20 21 22 23 24 25 26 27 28 29

и я использовал этот код:

while(getline(fin, str)){


 if(getline(fin, str, '#')){
cout << str << endl;  
}
  else{
cout << str << endl;
  }
 }

для того, чтобы получить и распечатать каждую строку из текстового файла сверху при извлечении каждой строки, начинающейся с комментария или, в данном случае, «#». он работает нормально, он печатает все, как следует, за исключением первой строки, которая говорит «заголовок». Мне нужно распечатать это вместе со всем остальным, но почему это не печать? и есть ли что-нибудь, что я могу сделать, чтобы убедиться, что он печатается вместе со всем остальным (кроме комментариев, очевидно. Я также должен проверить заголовок, чтобы убедиться, что в этом примере он говорит «заголовок». Как мне получить доступ к самому первая часть строки? для того, чтобы сделать для нее оператор if

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы вызываете функцию getline как условие while, вы читаете строку из файла в str. Тогда вам не нужно звонить снова. Он перезаписывает первый. Поэтому первая строка пропущена.

if(getline(fin, str) && str == "title"){ // check the first line here 
    do {
        if(str[0] != '#')
            cout << str << endl; // print out if read line is not comment
    } while(getline(fin, str));
}

Используя приведенный выше код, вы можете сначала проверить первую строку, а затем прочитать файл.

0 голосов
/ 10 ноября 2018
while(getline(fin, str)) {
  if(getline(fin, str, '#')){
    // ...

При первом вызове getline вы получаете первую строку (очевидно), затем снова вызываете getline, читаете вторую строку (опять же, очевидно) и заменяете первую строку из буфера.

Вы не видите первую строку в выводе, потому что вы перезаписываете ее второй строкой перед печатью.

То, что я думаю вы пытаетесь сделать, выглядит примерно так:

while(getline(fin, str)) 
  if(str[0] == '#') 
    cout << "comment: " << str << endl;  
  else
    cout << "data: " << str << endl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...