Телефонодобывающий комбайн Tony (tony@MadTanks.com) Спецвыпуск: Хакер, номер #056, стр. 056-060-5 ТИП: Листинг //В векторе context находится содержимое файла vector<char>::const_iterator it, end; it = context.begin(); end = context.end(); //Итерируемся по файлу в прямом направлении while( 1 ) { //До тех пор, пока в нем находятся символы ‘8’ it = find(it, end, '8'); if( it==end ) break; //Анализируем ту часть текста, где предположительно находится телефон ParsePhone( string( it, 32 ) ); //Продолжаем поиск в оставшейся части текста ++it; } "Анализ строки, содержащей номер телефона" ТИП: Листинг //Выбираем из текста токены, разделяемые следующими сепараторами: "-;|() .:<>/\\,". string number;//Найденный номер телефона typedef tokenizer<char_separator<char> > tTokenizer; char_separator<char> separators("-;|() .:<>/\\,");//Возможные разделители между цифрами tTokenizer tokens(context, separators);//Создаем токены //Итерируемся по всем найденным токенам for (tTokenizer::iterator it=tokens.begin(); it!=tokens.end(); ++it) { //Если количество последовательно записанных цифр в номере перевалило за 11, значит, номер собран if( number.length()>=11 ) break; //Проверяем, состоит ли токен только из цифр if( isDigit(*it) ) number += *it; else return; } //Добавляем собранный номер телефона в предварительный список mCellList.push_back( number ); "Регистрация фильтров" cFinder::cFinder() { //Регистрируем фильтры поиска номеров mFilterList.push_back( new cInternationalFilter ); mFilterList.push_back( new cFederalFilter ); } Клондайк номеров телефонов ТИП: WWW www.job.ru www.rabota.ru www.izrukvruki.ru www.flirt.ru Рекомендуемая литература ТИП: Книги 1. Бьерн Страуструп. Язык программирования С++. 2. Скотт Мейерс. Эффективное использование STL. 3. Гамма, Хелм, Джонсон, Влиссидес. Паттерны проектирования. |