Задача По Строкам

  • Автор темы slavik10000000
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

slavik10000000

#1
Задача:найти диапазони вхождений максимальной подстроки s2 в s1.

Вот код програми. Видимо ошибка в логике.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>

char* search(char*s1, char*s2, int tt2, int*rr, int*ll);
void output(char*ar, int*rr, int*ll);

int main()
{
char str1[50];
printf("input first string:");
gets(str1);
int t1=strlen(str1);
char str2[50];
printf("input second string:");
gets(str2);
int t2=strlen(str2);
int*r=(int*)calloc(t1, sizeof(int));
int*l=(int*)calloc(t1, sizeof(int));
char*b=search(str1, str2, t2, r, l);
output(b, r, l);
getch();
return 0;
}

char* search(char*s1, char*s2, int tt2, int*rr, int*ll)
{

int r=0;
for(int i=tt2; i>=0; i--)
{
int j=0;
for(int k=i; k<=tt2; k++)
{
char*t=(char*)calloc(i, sizeof(char));
int m=0;
for(int j1=j; j1<k; j1++) t[m++]=s2[j1];
char*bbb=strstr(s1,t);
if(bbb)
{
int j=0;
for(int k=i; k<tt2; k++)
{
int w=0, k1=k-1, j1=0;
while(bbb[j1++]==s1[k1++] && k1<i) w++;
if(w==k1)
{
rr[r++]=k+1;
ll[r-1]=j+1;
}
j++;
}
}
j++;
}
}

}

void output(char*ar, int*rr, int*ll)
{
printf("pstr:\n");
int i=0;
while(*(ar+i)!=0) printf("%c", ar[i++]);
printf("diapasons:\n");
int r=0;
while(rr[r]!=0)
{
printf("%i..%i;", rr[r], ll[r]);
r++;
}
}
 
Статус
Закрыто для дальнейших ответов.