Guest User

Untitled

a guest
May 23rd, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.47 KB | None | 0 0
  1. /* Napisati funkciju koja za dva stringa vraca duzinu njihovog
  2.    najveceg zajednickog podstringa.
  3.    Recimo ako imamo
  4.    string1: asdfqwertztzasf
  5.    string2: ertzfbnasdfqwert
  6.    Zajednicki podstringovi sa potencijalnim najvecim duzinama
  7.    mogu biti asdf i qwert, jer su oba ova podstringa
  8.    sadrzana u gore navedenim(unesenim stringovima)
  9.    Funkcija u ovom slucaju treba vratiti 5, jer je duzina
  10.    najduzeg zajednickog podstringa qwert->5 !! */
  11.  
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. void unos(char *string,int dimenzija)
  16. {
  17.     int i=0;
  18.     do
  19.     {
  20.         if (i++==dimenzija) break;
  21.         *string++=getchar();
  22.     }
  23.     while(*(string-1)!='\n');
  24.     *(string-1)='\0';
  25. }
  26.  
  27. int maxSubString(char *string1,char *string2)
  28. {
  29.     int maxDuzina=0;
  30.     /* Moram zapamtiti gdje mi je pocetak drugog stringa */
  31.     char *pocetak=string2;
  32.     /* Prolazim kroz prvi string */
  33.     while(*string1!='\0')
  34.     {
  35.         /* Prolazim kroz drugi string */
  36.         /* Kako je ova petlja unuranja, to znaci
  37.            da dok uzmem jedan znak stringa1, proci cu kroz
  38.            sve znakove stringa2, zato mi treba ono gore pocetak */
  39.         while(*string2!='\0')
  40.         {
  41.             /* Duzina podstringa u svakoj iteraciji postavljenja na nulu */
  42.             int duzina=0;
  43.             /* Trebaju mi pomocni pokazivaci iz razloga sto pokazivaci
  44.                string1 i string2, pamte ukupno od kojeg znaka poredim,
  45.                a sa ovim pomocnim se krecem "naprijed" sve dok su znakovi isti,
  46.                u prevodu, dok imaju jednake podstringove */
  47.             char *pomocni1=string1,*pomocni2=string2;
  48.             /* To upravo radi ova petlja i broji tu duzinu */
  49.             while(*pomocni1++==*pomocni2++)
  50.             {
  51.                 duzina++;
  52.                 /* Moramo paziti da ne gledamo znakove iza \0 */
  53.                 if (*pomocni1=='\0' || *pomocni2=='\0') break;
  54.             }
  55.             /* Ako je ta duzina veca od maksimalne uzimam novu vrijednost */
  56.             if (duzina>maxDuzina) maxDuzina=duzina;
  57.             string2++;
  58.         }
  59.         /* Buduci da sam nakon petlje dosao do kraja stringa2
  60.             isti moram vratiti na pocetak, kako bi nastavio
  61.             poredjenje od sljedeceg znaka stringa1 */
  62.         string2=pocetak;
  63.         string1++;
  64.     }
  65.     return maxDuzina;
  66. }
  67.  
  68. int main()
  69. {
  70.     char string1[100],string2[100];
  71.     unos(string1,100);
  72.     unos(string2,100);
  73.     printf("%d",maxSubString(string1,string2));
  74.     return 0;
  75. }
Add Comment
Please, Sign In to add comment