> если закладываешься на размер строки, то смотри мой первый > ответ
Если уж совсем не делать предположений о длине строки, то в STL-е getline перегружается и так:
template<class _E, class _Tr, class _A> inline
basic_istream<_E, _Tr>& __cdecl getline(basic_istream<_E, _Tr>& _I,
basic_string<_E, _Tr, _A>& _X, const _E _D)
{
// skipped
}
---
Взято из VC++ 6.0 STL-а, так что названия переменных интуитивно понятные :-). А string как известно сам заботится о размещении и увеличении строки.
Короче можно и так:
using namespace std;
string s;
ifstream is("filename.ext");
getline(is, s, ';');
---
> а если хочешь поспорить у кого в этом случае универсальнее, > то вот пример: > c:\windows\logo.bmp > c:\windows\logo.bmp;10.10.2002
Насколько я вообще понимаю в разборе форматированных данных, формат не меняется во всем файле. Иначе нужно вообще брать flex с bison-ом и писать парсер :-)))
А вот понятность и сопровождаемость моего варинта выше.
ЗЫ: Кстати, в данном случае в плане эффективности flex - идеальное решение. Быстрее вряд ли можно написать.
Бест Регардс,
Сергей
|