logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak przerobić implementację algorytmu KMP z C++ na C?

wisnia90090 24 Maj 2011 22:17 2082 6
REKLAMA
  • #1 9541009
    wisnia90090
    Poziom 2  
    Posty: 3
    Witam
    Poniżej przedstawiam implementacje algorytmu KMP napisaną w C++. Problem polega na tym że nie mogę przerobić tego kodu na C bo chcę aby byl w calości w C. Proszę o pomoc.
    Z góry dziękuje.

    Oto kod w C++

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. - arnoldziq
  • REKLAMA
  • #2 9541647
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    po pierwsze popraw post, umieść ładnie sformatowany kod w nawiasach [ code ] [ /code ]
  • REKLAMA
  • #3 9542064
    beluosus
    Poziom 25  
    Posty: 362
    Pomógł: 123
    Ocena: 18
    wisnia90090 napisał:
    Poniżej przedstawiam implementacje algorytmu KMP napisaną w C++.

    To jest w C. Można jedynie usunąć warunek preprocesora.

    wisnia90090 napisał:
    Problem polega na tym że nie mogę przerobić tego kodu na C bo chcę aby byl w calości w C.

    Chyba mało poprawne zdanie. Nie możesz ale chcesz? Czy może nie umiesz?

    @Xitami: nie [code] tylko [syntax].
  • REKLAMA
  • Pomocny post
    #4 9542899
    lolcio
    Poziom 16  
    Posty: 133
    Pomógł: 29
    Ocena: 8
    Proszę Twoj kod w C:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #define max(value1,value2) ((value1 > value2) ? value1 : value2)
    
    void main(void)
    {
    char wzorzec[100];
    char tekst[2000];
    int m,n,i,j,t;
    int P[100];//maksymalna dlugosc wzorca to 100 symboli
    printf("Podaj tekst\n");
    scanf("%s", tekst);
    printf("Podaj wzorzec\n");
    scanf("%s", wzorzec);
    n=strlen(tekst);
    m=strlen(wzorzec);
    printf("Indeksy poczatku wzorca w tekscie\n");
    
    //obliczenie tablicy P
    P[0]=0; P[1]=0; t=0;
    for (j=2; j<=m; j++)
     {
     while ((t>0)&&(wzorzec[t]!=wzorzec[j-1])) t=P[t];
     if (wzorzec[t]==wzorzec[j-1]) t++;
     P[j]=t;
     }
    
    //algorytm KMP
    i=1; j=0;
    while (i<=n-m+1)
     {
     j=P[j];
     while((j<m)&&(wzorzec[j]==tekst[i+j-1])) j++;
     if (j==m) printf("%d\n",i);
    i=i+max(1,j-P[j]);
     }
    //getch();
    return;
    }
    

    Nie ma za co :)
  • REKLAMA
  • #5 9543128
    wisnia90090
    Poziom 2  
    Posty: 3
    wielkie dzięki lolcio:))
  • #6 9543194
    azra
    Poziom 17  
    Posty: 108
    Pomógł: 26
    Ocena: 2
    Tylko na bogów, int main :P

Podsumowanie tematu

✨ Użytkownik poszukiwał pomocy w przerobieniu implementacji algorytmu KMP z C++ na C. W odpowiedziach zasugerowano usunięcie warunku preprocesora oraz przedstawiono poprawioną wersję kodu w C. Zwrócono uwagę na konieczność użycia funkcji `int main()` oraz dodania `return EXIT_SUCCESS;` na końcu funkcji głównej. Użytkownik podziękował za pomoc.
Wygenerowane przez model językowy.
REKLAMA