Форум программистов, компьютерный форум CyberForum.ru

с++11. Сильно тормозят регулярные выражения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ описать класс блокнот http://www.cyberforum.ru/cpp-beginners/thread713716.html
может у кого-то уже она где-то валяется.. Описать класс «блокнот». Предусмотреть возможность работы с произвольным количеством записей, поиска записи по какому-либо признаку (например, фамилия, дата рождения или номер телефона), добавления и удаления записей, сортировки по разным полям. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее...
C++ Вычислить сумму на отрезке. помогите написать на с++ программу, находящую сумму на отрезке , где каждое слагаемое представляет собой произведение чисел отрезка в порядке их следования. Первое слагаемое содержит один элемент – x, второе – произведение двух следующих, третье – трех следующих и т.д. Последнее слагаемое является произведением всех оставшихся чисел до y включительно. Нахождение слагаемого оформить в виде... http://www.cyberforum.ru/cpp-beginners/thread713713.html
C++ isdigit() не понимаю
Здрасти всем! Не могу понять, почему isdigit() неверно себя ведет. Точнее абсолютно наоборот. #include <iostream> const int SIZE = 10; int main() { using namespace std;
C++ Символьный масив
Помогите закончить програму которая заполняет символьный масив с клавиатуры ,вроде сделал но когда в тексте есть пробелы или какие нибуть знаки препинания она вместо мого текста выводит чтото непонятное Например: Ввожу с клавиатуры aska dur,dur.dur получается :aska MMMMMMMMMMM вот мои наброски: #include<iostream> #include<cstdio> using namespace std;
C++ Задача по контейнерам stl vector и list http://www.cyberforum.ru/cpp-beginners/thread713695.html
Дан сортированный по убыванию массив int'ов размером 100 элементов. Значение начального максимального элемента a, минимального b. На вход приложения идут числа x входящие в этот диапазон, a>=x>=b. Необходимо при приходе каждого числа x находить его место в массиве и вставлять соответственно в это место (сортировка массива при этом сохраняется). Последний элемент надо удалять, чтобы размер...
C++ Для текста произвольной программы написать программу печати всех идентификаторов. Для текста произвольной программы написать программу печати всех идентификаторов. подробнее

Показать сообщение отдельно
Suppir
24 / 24 / 3
Регистрация: 08.08.2011
Сообщений: 1,135
30.11.2012, 23:04  [ТС]
Цитата Сообщение от diagon Посмотреть сообщение
Кстати, есть такой бенчмарк.
Как видно из него бусторегексы более чем в 3 раза уступают по скорости гугловой либе(кстати, на первом месте тоже детище гугла), но все же почти в 2 раза быстрее перловых.
Это я к тому, что стоит использовать нормальные либы для регексов.
Гуглолиба, вроде, имеет стандарт, аналогичный POSIX, т.е. не поддерживает обратных ссылок. А они жизненно необходимы для обработки текста (поиска-замен).

Добавлено через 5 минут
Еще пару слов насчет регулярных выражений в с#.
Они сделаны по стандарту Perl, но очень неудобны. Дело в том, что Perl автоматически компилирует (оптимизирует) регулярное выражение, которое не имеет интерполируемых переменных. Если регулярка встречается в цикле, то Perl компилирует его один раз (а не каждый раз, как пытается сделать c#). В с# приходится сначала создавать регулярку с флагом "компилировать", а только потом ее использовать. Причем, создавать регулярки приходится вне цикла, где идет обработка текста. Таким образом получается, что регулярки у вас определены в одной части экрана, а применяются в другой. Это очень неудобно.

Добавлено через 6 минут
"Таким образом получается, что регулярки у вас определены в одной части экрана, а применяются в другой. Это очень неудобно."

Собственно, как и в программе, которую я привел в сабже.

Добавлено через 11 минут
Кстати, насчет бенчарка. Там сразу видно несколько критичных ошибок в коде Perl. Например, в регулярных выражения используется альтернация квантифицируемых символов (конструкции вроде /a+|b*/). При этом регулярка будет нещадно тормозить. Это общая проблема регулярок на недетерминированных конечных автоматах. Хуже только двойные квантификаторы /([a-z]*)+/ - тогда время поиска вообще взлетает по экспоненте. Нужно альтернацию убирать в код: /a+/ || /b*/. Так будет реально на порядок быстрее. Код для бенчмарка писал человек, который Perl вчера увидел.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru