- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
#include <string>
std::string SearchPushString(char StartVkPage[])
{
char push[] = {'p','o', 's', 't'};
char http[] = {'h','t', 't', 'p'};
unsigned int* ipush = (unsigned int*)push;
unsigned long j = 0;
do
{
char* p = &StartVkPage[j];
unsigned int* nextFourSymbol = (unsigned int*)p;
if(nextFourSymbol[0]==ipush[0])
{
if(*p=='p')
ipush = (unsigned int*)http;
else
{
char* postString = new char[650];
memset(postString,0,650);
short int u = 0;
do
{
postString[u] = p[u];
}
while(p[++u]!='"'&&u!=650);
std::string url(postString);
delete [] postString;
return url;
}
}
}
while(StartVkPage[j++]);
return std::string("error");
}
Я все никак не выучу регулярных выражений, ИЧСХ - обхожусь.
LispGovno 06.04.2014 11:08 # 0
Dummy00001 06.04.2014 12:48 # +21
в данном случае код и так извратный - и дырявый. регулярки автору бы однозначно помогли.
anonimb84a2f6fd141 06.04.2014 15:57 # −2
WGH 06.04.2014 14:11 # +10
Dummy00001 06.04.2014 15:34 # 0
лексеры это именно то место где регулярками никто не пользуется. потому что производительность сразу в ж. `n` возможных токенов проверяются `m` (длина ввода) раз - это достаточно близко к квадратичной производительности.
bormand 06.04.2014 15:36 # 0
Dummy00001 06.04.2014 15:42 # 0
внутри этого конечного автомата проверки делаются уже без регулярок.
bormand 06.04.2014 15:47 # 0
Ну это уже деталь реализации. А с точки зрения юзера flex'а - там именно регулярки для каждого токена.
xavij 06.04.2014 15:49 # −54
Dummy00001 06.04.2014 15:50 # −1
bormand 06.04.2014 15:52 # 0
Девелопер lex'а - тот, кто пилит сам lex.
Юзер lex'а - другой девелопер, который пилит свою прогу, а lex, внезапно, кхм, юзает.
Что не так то? :)
xavij 06.04.2014 15:53 # −2
bormand 06.04.2014 15:59 # 0
blandermein 06.04.2014 16:00 # −1
Dummy00001 06.04.2014 16:00 # +1
anonimb84a2f6fd141 06.04.2014 16:00 # −3
anonimb84a2f6fd141 06.04.2014 15:59 # −3
WGH 06.04.2014 15:40 # 0
Dummy00001 06.04.2014 15:49 # −1
регулярка - это есть множество строк.
проверка регулярки - проверка является ли строка членом этого множества.
типичная реализация регулярок - автомат, динамически генерируемый в памяти.
лексер как правило состоит из множества токенов. каждый токен регулярка. после генерации ты из кучи автоматов создается один, что бы каждый раз ввод проверять не через Н автоматов, а только через один. и часто этот автомат создается статически (а не динамически) и еще в добавок оптимизируется компилятором. но если это производительность не нужна, то можно и ручками, конечно.
WGH 06.04.2014 15:53 # 0
>лексер как правило состоит из множества токенов. каждый токен регулярка.
Так всё же?
Dummy00001 06.04.2014 15:54 # 0
bormand 06.04.2014 15:57 # 0
Т.е. все-таки регулярки при токенизации используются :)
Короче спор ни о чем.
WGH 06.04.2014 16:00 # 0
anonimb84a2f6fd141 06.04.2014 16:01 # −3
anonimb84a2f6fd141 06.04.2014 15:58 # −3
xavij 06.04.2014 15:42 # −39
bormand 06.04.2014 15:48 # 0
anonimb84a2f6fd141 06.04.2014 16:03 # −3
bormand 06.04.2014 16:30 # +3
kargoudn 06.04.2014 17:13 # +4
kargoudn 06.04.2014 17:20 # −4
kargoudn 06.04.2014 17:42 # +1
Psionic 07.04.2014 10:56 # 0
bormand 07.04.2014 11:10 # 0
Не, я же злобный ханжа, любящий самоутверждаться за счет унижения людей (но при этом делающий вид, что помогает им) и глядящий на них как на говно.
P.S. Может быть вместо return "error" стоит выбросить исключение?
brutushafens 07.04.2014 17:36 # 0
TarasB 07.04.2014 11:33 # 0
НА-ХУ-Я
bormand 07.04.2014 11:39 # 0
А-НА-ЛО-ГИЧ-НО.
Ради одного нолика весь массив забивать нулями...
Да еще и цикл, который там ниже по тексту, забагуется и вылезет за границы буфера, если закрывающей " нету.
P.S. Я чуть выше написал как правильно превращать кусок const char * в std::string.
Psionic 07.04.2014 16:52 # 0
bormand 07.04.2014 17:21 # 0
Psionic 07.04.2014 18:19 # +2
brutushafens 07.04.2014 17:33 # −2
bormand 07.04.2014 17:38 # 0
brutushafens 07.04.2014 17:42 # −1