Обработка строки.
От: Keith  
Дата: 05.08.03 20:04
Оценка:
Интересны варианты распознавания строк на отдельные части. Т.е.

1. читаем из cin.
2. распознаем прочитанное.
3. заполняем структуру имеющую различные типы.

Интересует 2-ой пункт. Т.е. я получаю что-то вроде "abc123.13ggde435.345" и должен это епревести в
"abc" — строка
"12" — целое, длиной два символа
"3.13" — float
и т.д. Т.е. всего(на сколько я понимаю) ограничений может быть только два:
а) на тип;
б) на длинну;

Интересуют самые красивые\быстрые варианты, и вообще все идеи по этому поводу.
Re: Обработка строки.
От: Цунцуяби Россия  
Дата: 06.08.03 02:23
Оценка: 1 (1)
Здравствуйте, Keith, Вы писали:

1.23e45 — это 3 поля или одно научное число ?

А вообще — boost/spirit

Парсер для списка полей ("field, [long name], [еще поле]") выглядит примерно так:

bool columnlist::parse_list( const string& str )
{
    using namespace boost::spirit;
    rule<> list, field, identificator, long_identificator;

    list                = field 
                        >> *(space_p) 
                        >> *(',' >> *(space_p) >> field) 
                        >> *(space_p);
    field                = identificator[ append( m_list ) ] 
                        | ('[' >> *(space_p) >> long_identificator[ append( m_list ) ] >> *(space_p) >> ']');
    identificator        = alpha_p >> *(alnum_p);
    long_identificator    = alpha_p >> *(alnum_p | space_p);
    

    return parse( str.c_str(), list ).full;
}
Re: Обработка строки.
От: Аноним  
Дата: 06.08.03 05:45
Оценка:
Конечный автомат. На нем основываются сканнеры в компиляторах.

Здравствуйте, Keith, Вы писали:

K> Интересны варианты распознавания строк на отдельные части. Т.е.


K>1. читаем из cin.

K>2. распознаем прочитанное.
K>3. заполняем структуру имеющую различные типы.

K>Интересует 2-ой пункт. Т.е. я получаю что-то вроде "abc123.13ggde435.345" и должен это епревести в

K>"abc" — строка
K>"12" — целое, длиной два символа
K>"3.13" — float
K> и т.д. Т.е. всего(на сколько я понимаю) ограничений может быть только два:
K>а) на тип;
K>б) на длинну;

K> Интересуют самые красивые\быстрые варианты, и вообще все идеи по этому поводу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.