что ж он за ********** такой?
зачем алогоритм?
ну вот он получил алгоритм, он доволен?
Ферокса давайте спросим, что же он хотел

Перегляньте відео нижче, щоб дізнатися, як встановити наш сайт як веб-програму на головному екрані.
Замітка: This feature may not be available in some browsers.
что ж он за ********** такой?
зачем алогоритм?
ну вот он получил алгоритм, он доволен?

Это ваш друг ? Коллега из академических кругов ?Царьков В.Б. Теория и методика построения регулярных выражений.
Это ваш друг ? Коллега из академических кругов ?
всё чушьЦарьков В.Б. Теория и методика построения регулярных выражений.

А вы только сообщения на форумах читаете? Книги не любите?
всё чушь
где практика?
вы уже автореферат пишите?

А вы только сообщения на форумах читаете? Книги не любите?
это личный вопрос
хабу не должен отвечать
Я их пишу.
о, поздравляю, а когда защита?
Царьков В.Б. Теория и методика построения регулярных выражений.
print_r(matchCharPatternIndian('12345', '12...,,,3.4,543534..1...,,,2.34...5'));
function matchCharPatternIndian($pattern, $subject)
{
$result = array();
$patternIndex = 0;
$patternLen = strlen($pattern);
$startPos = null;
$count = strlen($subject);
for ($i=0; $i<$count; $i++) {
$char = $subject[$i];
if ($char != $pattern[$patternIndex]) {
//Match not found
if (!is_null($startPos) && !in_array($char, array('.', ','))) { //Reset search:
$patternIndex = 0;
$startPos = null;
}
continue;
}
//Match found:
if (is_null($startPos)) { //First char in pattern
$startPos = $i;
}
$patternIndex++;
if ($patternIndex >= $patternLen) {
//Last char found
$result[] = substr($subject, $startPos, $i-$startPos+1);
$patternIndex = 0;
$startPos = null;
}
}
return $result;
}
о, поздравляю, а когда защита?
читайте вечерние газеты.
Ферокса давайте спросим, что же он хотел![]()
и где ТЕОРИЯ РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ? у Вас как с пониманием слов??
по просьбам дворянства выкладываю индийский вариант:
PHP:print_r(matchCharPatternIndian('12345', '12...,,,3.4,543534..1...,,,2.34...5')); function matchCharPatternIndian($pattern, $subject) { $result = array(); $patternIndex = 0; $patternLen = strlen($pattern); $startPos = null; $count = strlen($subject); for ($i=0; $i<$count; $i++) { $char = $subject[$i]; if ($char != $pattern[$patternIndex]) { //Match not found if (!is_null($startPos) && !in_array($char, array('.', ','))) { //Reset search: $patternIndex = 0; $startPos = null; } continue; } //Match found: if (is_null($startPos)) { //First char in pattern $startPos = $i; } $patternIndex++; if ($patternIndex >= $patternLen) { //Last char found $result[] = substr($subject, $startPos, $i-$startPos+1); $patternIndex = 0; $startPos = null; } } return $result; }
ну чо, меряемся производительностью труда?
Формализовать вашу веру в судьбу в виде исходного кода корректно работающего алгоритма, не?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static inline
int is_special(const char ch)
{
return (ch == ',') || (ch == '.');
}
/*
* remove special characters and store positions
*/
void strip_special(const char *input, char **packed, unsigned int **positions)
{
/* allocation stuff */
unsigned int packed_len = 0;
const char *p;
for(p = input; *p; p++)
{
if(!is_special(*p))
packed_len++;
}
*packed = malloc(sizeof(char) * (packed_len + 1));
*positions = malloc(sizeof(unsigned int) * (packed_len + 1));
/* packing stuff */
unsigned int packing_position = 0,
input_position = 0;
for(; input[input_position]; input_position++)
{
if(!is_special(input[input_position]))
{
(*packed)[packing_position] = input[input_position];
(*positions)[packing_position] = input_position;
packing_position++;
}
}
(*packed)[packing_position] = 0;
(*positions)[packing_position] = input_position;
}
/*
* find substrings
*/
int* search(const char *input, const char *pattern,
unsigned int input_len, unsigned int pattern_len)
{
/* KMP */
unsigned int table_len = input_len + 1 + pattern_len;
char *kmp_string = malloc(sizeof(char) * table_len);
unsigned int *sublens = malloc(sizeof(unsigned int) * table_len);
memcpy(kmp_string, pattern, pattern_len);
kmp_string[pattern_len] = 0;
memcpy(kmp_string + pattern_len + 1, input, input_len);
sublens[0] = 0;
unsigned int i = 1,
matched_len = 0,
match_count = 0;
for(; i < table_len; i++)
{
while(matched_len > 0 && kmp_string[i] != kmp_string[matched_len])
matched_len = sublens[matched_len - 1];
if(kmp_string[i] == kmp_string[matched_len])
matched_len++;
sublens[i] = matched_len;
if(matched_len == pattern_len)
match_count++;
}
/* packing results */
int *results = malloc(sizeof(unsigned int) * (match_count + 1));
unsigned int match_number = 0;
for(i = 0; i < table_len; i++)
{
if(sublens[i] == pattern_len)
{
results[match_number] = i - 2*pattern_len;
match_number++;
}
}
/* end of results mark */
results[match_number] = -1;
free(kmp_string);
free(sublens);
return results;
}
/*
* extract result from unpacked string
*/
char* extract(unsigned int match, unsigned int pattern_len,
const char *input, unsigned int *positions)
{
unsigned int start = positions[match],
end = positions[match + pattern_len - 1] + 1;
char *result = malloc(sizeof(char) * (end - start + 1));
memcpy(result, input+start, end - start);
result[end - start] = 0;
return result;
}
/*
* testing stuff
*/
char *inputs[] =
{
"1234",
"123.4",
"123.,4 asdfada",
"asdfsad 23472.2423...4e",
"123.3.,32.4,2.422",
NULL
};
char *patterns[] =
{
"1",
"42",
"123",
"345",
"34",
NULL
};
int main()
{
unsigned int input_number;
for(input_number = 0; inputs[input_number]; input_number++)
{
char *input = inputs[input_number];
printf("Processing \"%s\":\n", input);
char *packed;
unsigned int *positions;
strip_special(input, &packed, &positions);
unsigned int packed_len = strlen(packed);
unsigned int pattern_number;
for(pattern_number = 0; patterns[pattern_number]; pattern_number++)
{
char *pattern = patterns[pattern_number];
unsigned int pattern_len = strlen(pattern);
printf(" with pattern \"%s\":", pattern);
int *matches = search(packed, pattern, packed_len, pattern_len);
int match;
for(match = 0; matches[match] != -1; match++)
{
printf("%s ", extract(matches[match], pattern_len, input, positions));
}
printf("\n");
free(matches);
}
free(packed);
free(positions);
}
return 0;
}
// vim: ts=4 sw=4 et
так еще и идентификаторы информативненькие такие: k, d, s, pf, v1, v2..
Дима, это что за гуйня вообще? ты такому студентов учишь?
я за такое рожей по монитору размазываю.
а шо это за стандарты кодирования такие уникальные, что операторы for и if оформлены по разному?
блин, дилетансткое, потенциальное опасное, немасштабируемое...
Антон, ну вот это уже АЛГОРИТМ. А то регулярные выражения, регулярные выражения.
просто это было скопиз[...]но с википедии
просто это было скопиз[...]но с википедии

я быстрее написал с нуля и по-человечески, чем он колупал чужой примерчик.
и эти люди думают, что чему-то учат студентов.
Антон, ожидаю от реализации вашего алгоритма вот такой результат:
45,,,,,,,,,67..........8
вот именноподтяни терминологию, пока никуда не годится. знаешь, как за это ипут??
.
чота машает поменять строку, передаваемую в аргумент $pattern???
опять не знаете как скомпилировать и интерпретировать?

Боюсь ваш "стандарт кодирования" нарушить![]()