Advertisement
Guest User

Algorytmy i struktury danych #1

a guest
Mar 23rd, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int dlugosc(char *lan);
  5. int sprawdz(char*tekst, char*wzor);
  6. int*sprawdz_w(char* tekst, char* wzor, int* ilosc);
  7.  
  8. int main()
  9. {
  10.     char lan[100];
  11.     char wzr[100];
  12.     int index = 0;
  13.     int*indexy = NULL;
  14.     int ilosc = 0;
  15.     int i = 0;
  16.  
  17.     while(1)
  18.     {
  19.         printf("--------------\nWpisz lancuch>");
  20.         fflush(stdin);
  21.         *lan = 0;
  22.         scanf("%99[^\n]s", lan);
  23.  
  24.         if(*lan == 0)
  25.         {
  26.             printf("Lancuch pusty!\n\n");
  27.             continue;
  28.         }
  29.  
  30.         printf("Dlugosc ciagu: %d", dlugosc(lan));
  31.  
  32.         printf("\n\nPodaj wzor do znalezienia:>");
  33.         fflush(stdin);
  34.         *wzr = 0;
  35.         scanf("%99[^\n]s", wzr);
  36.         if(*wzr == 0)
  37.         {
  38.             printf("Lancuch pusty!\n\n");
  39.             continue;
  40.         }
  41.    
  42.         index = sprawdz(lan, wzr);
  43.  
  44.         if(index == -1)
  45.         {
  46.             printf("\nNie znaleziono wzoru w tekscie!");
  47.             break;
  48.         }
  49.         else
  50.             printf("\nZnaleziono wzor w miejscu: %d", index);
  51.  
  52.         indexy = sprawdz_w(lan, wzr, &ilosc);
  53.  
  54.         printf("\nZnaleziono %d wzorow w miejscach:\n", ilosc);
  55.         for(i = 0; i < ilosc; i++)
  56.             printf("%d\t", indexy[i]);
  57.         printf("\n\n");
  58.     }
  59.        
  60.     getch();
  61.  
  62.     return 0;
  63. }
  64.  
  65. int dlugosc(char *lan)
  66. {
  67.     int i = 0;
  68.     while(lan[i]!='\0')
  69.         i++;
  70.     return i;
  71. }
  72.  
  73. int sprawdz(char*tekst, char*wzor)
  74. {
  75.     int i = 0;
  76.     int j = 0;
  77.     int f = 0;
  78.     int len = dlugosc(tekst);
  79.     int lenwz = dlugosc(wzor);
  80.  
  81.     for(i = 0; i < len; i++)
  82.     {
  83.         if(lenwz > len + i) break;
  84.  
  85.         for(j = 0; j < lenwz; j++)
  86.         {
  87.             //printf("\n[%d] = %c\t|\t%c = [%d]", i+j, tekst[i+j], wzor[j], j);
  88.             if(tekst[j+i] != wzor[j])
  89.                 break;
  90.         }
  91.         if(j == lenwz) return i;
  92.     }
  93.    
  94.     return -1;
  95. }
  96.  
  97. int* sprawdz_w(char *tekst, char *wzor, int *ilosc)
  98. {
  99.     int * indeksy = NULL;
  100.     int i = 0;
  101.     int j = 0;
  102.     int f = 0;
  103.     int len = dlugosc(tekst);
  104.     int lenwz = dlugosc(wzor);
  105.  
  106.     *ilosc = 0;
  107.  
  108.     for(i = 0; i < len; i++)
  109.     {
  110.         if(lenwz > len + i) break;
  111.  
  112.         for(j = 0; j < lenwz; j++)
  113.         {
  114.             //printf("\n[%d] = %c\t|\t%c = [%d]", i+j, tekst[i+j], wzor[j], j);
  115.             if(tekst[j+i] != wzor[j])
  116.                 break;
  117.         }
  118.         if(j == lenwz)
  119.         {
  120.             indeksy = (int*) realloc(indeksy, sizeof(int) * (*ilosc+1));
  121.        
  122.             indeksy[*ilosc] = i;
  123.             (*ilosc)++;
  124.         }
  125.     }
  126.  
  127.     return indeksy;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement