Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 12.08.2002, 04:22   #1
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post getline function

ну почему getline(basic_string<...>&, basic_istream<...>&, E delim) выкидывает delim, не добавляя его в выходной ресультат?!? и есть ли стандартная функция с добавлением? а то я уже сижу, алгоритмы с итераторами копаю в этом направлении...
Reply With Quote
Old 12.08.2002, 21:20   #2
Guru Apprentice
 
Join Date: 02 2002
Location: /dev/null
Age: 41
Posts: 524
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Post

? а ты разве не знаешь кто твой delim когда вызываешь функцию? сам добавляй трудно что-ли?
Reply With Quote
Old 12.08.2002, 21:33   #3
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Post

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

а если у тебя несколько делим-ов - который нужно в результат кидать ?
лол
Reply With Quote
Old 12.08.2002, 23:18   #4
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post

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

2 greco:
а это смотря как к этому понятию подходить. не сосредотачиваясь на различных подходах, скажу только, что данная реализация вообще теряет разделитель - не только не добавляет к строке, но и из потока изымает. из-за чего приходится затрачивать дополнительные усилия по отлову разделителя.
а несколько делимов на одной позиции быть не может, один да всретится первым, лишив второго его очереди. не виу здесь никакой проблемы.
Reply With Quote
Old 12.08.2002, 23:29   #5
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Post

ты просто не понял моего вопроса - я говорил о множестве делимов - когда оное состоит из нескольких элементов...
ну да неважно.
Reply With Quote
Old 12.08.2002, 23:51   #6
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post

Quote:
Originally posted by Greco El:
ты просто не понял моего вопроса - я говорил о множестве делимов - когда оное состоит из нескольких элементов...
а, ну это уже выходит за рамки возможностей getline
Reply With Quote
Old 13.08.2002, 03:48   #7
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post

(красивое) решение найдено! оказывается, 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++ оказываются еще и весьма красивыми не забывайте об этом!
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 00:46.


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