- 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
int seek_substring_KMP (char s[], char q[])
{
int i, j, N, M;
N = strlen(s);
M = strlen(q);
int *d =(int*)malloc(M*sizeof(int)); /* динамический массив длины М*/
/* Вычисление префикс-функции */
i=0;
j=-1;
d[0]=-1;
while(i<M-1)
{
while((j>=0) && (q[j]!=q[i]))
j = d[j];
i++;
j++;
if(q[i]==q[j])
d[i]=d[j];
else
d[i]= j;
}
/* поиск */
for(i=0,j=0;(i<N)&&(j<M); i++,j++)
while((j>=0)&&(q[j]!=s[i]))
j=d[j];
free (d); /* освобождение памяти массива d */
if (j==M)
return i-j;
else /* i==N */
return -1;
}
Алгоритм Кнута — Морриса — Пратта. Жуже сложно реализвовать(
guest 07.08.2009 23:48 # 0
почему? нормальный КМП, всего 31 строка:) на паскале он больше занимает
guest6 07.06.2024 07:52 # 0
guest 10.09.2009 00:33 # 0
guest 24.11.2009 07:29 # +7
guest 03.04.2011 11:56 # +4
guest6 07.06.2024 07:54 # 0
guest6 07.06.2024 00:04 # 0
guest6 07.06.2024 00:24 # 0
guest6 07.06.2024 00:28 # 0
guest6 07.06.2024 00:46 # 0
guest6 07.06.2024 00:56 # 0
Это Борланд си под дос?
Тогда нужно результат mallocа проверять: там куча мала совсем
guest6 07.06.2024 00:28 # 0
- Наконец-то ты повзрослел. Давай.
- Как ты думаешь, кто сильнее: акула или медведь?
guest6 07.06.2024 07:46 # 0
guest6 07.06.2024 01:08 # 0
guest6 07.06.2024 15:56 # 0
guest6 07.06.2024 15:49 # 0
guest6 07.06.2024 16:13 # 0
guest6 08.06.2024 02:19 # 0
Ну как, переделал?