Armenian Knowledge Base

Armenian Knowledge Base (https://forum.armkb.com/)
-   Languages, Compilers, Interpreters (https://forum.armkb.com/languages-compilers-interpreters/)
-   -   getline function (https://forum.armkb.com/languages-compilers-interpreters/77-getline-function.html)

Aram Hambardzumyan 12.08.2002 03:22

getline function
 
ну почему getline(basic_string<...>&, basic_istream<...>&, E delim) выкидывает delim, не добавляя его в выходной ресультат?!? и есть ли стандартная функция с добавлением? а то я уже сижу, алгоритмы с итераторами копаю в этом направлении... :(

Ektich 12.08.2002 20:20

? а ты разве не знаешь кто твой delim когда вызываешь функцию? сам добавляй трудно что-ли?

greka 12.08.2002 20:33

нафига тогда существует понятие делим, если и его в выходной результат закидывать ??

а если у тебя несколько делим-ов - который нужно в результат кидать ?
лол

Aram Hambardzumyan 12.08.2002 22:18

2 ektich:
можно, но дополнительно надо проверять, не произошла ли остановка из-за eof. если в цикле, то код некрасивый получается. но видимо на этом и придется остановиться.

2 greco:
а это смотря как к этому понятию подходить. не сосредотачиваясь на различных подходах, скажу только, что данная реализация вообще теряет разделитель - не только не добавляет к строке, но и из потока изымает. из-за чего приходится затрачивать дополнительные усилия по отлову разделителя.
а несколько делимов на одной позиции быть не может, один да всретится первым, лишив второго его очереди. не виу здесь никакой проблемы.

greka 12.08.2002 22:29

:) ты просто не понял моего вопроса - я говорил о множестве делимов - когда оное состоит из нескольких элементов...
ну да неважно.

Aram Hambardzumyan 12.08.2002 22:51

Quote:

Originally posted by Greco El:
:) ты просто не понял моего вопроса - я говорил о множестве делимов - когда оное состоит из нескольких элементов...
а, ну это уже выходит за рамки возможностей getline :)

Aram Hambardzumyan 13.08.2002 02:48

(красивое) решение найдено! оказывается, getline возвращает поток, чем мы и воспользуемся:
Code:

  string s;
  while(!getline(in, s, '.').eof())
  {
    s += '.';
    // ...
  }

именно отсутсвие этого момента мне и мешало - не хотелось писать что-то вроде
Code:

  string s;
  getline(in, s, '.');
  while(!in.eof())
  {
    // ...
    getline(in, s, '.');
  }

или то же самое через for.
кроме того, конкретно моя задача решается еще проще - т. к. я потом должен делать разбор строки s, я могу действительно забывать о '.' и разбор организовывать с учетом этого момента (т. е. отсутствие точки на конце не считать ошибкой). но это уже мелочь.
всем: научно не доказано, но обычно эффективные программы на c++ оказываются еще и весьма красивыми ;) не забывайте об этом!


All times are GMT. The time now is 04:35.

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.