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

Тема в разделе "Общие вопросы по С и С++", создана пользователем slavik10000000, 25 дек 2011.

Статус темы:
Закрыта.
  1. slavik10000000

    slavik10000000 Гость

    Задача:найти диапазони вхождений максимальной подстроки 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++;
    }
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей