Guest User

Untitled

a guest
Apr 23rd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.54 KB | None | 0 0
  1. #include <stdio.h>
  2. /* Standardna funkcija za unos stringa. vel = velicina stringa*/
  3. void unesi(char* string, int vel) /*U nasem slucaju, pokazivac "string" na varijablu tipa char uzima adresu pocetnog elementa niza "a" pa samim tim on pokazuje na prvi element niza.*/
  4. {
  5.     int i=0;
  6.     do
  7.     {
  8.         *string++ = getchar(); /*Prvom elementu se pridruzuje onaj znak koji unesemo te nakon toga pokazivac pokazuje na slijedece mjesto u memoriji, a kako deklaracijom niza zauzmemo onoliko prostora u memoriji koliko nam je potrebno za citav niz to nam omogucuje da u memoriji poredamo elemente niza jedan do drugog pa ce ovim postupkom pokazivac pokazivati na slijedeci element niza. Dakle unos se u stvari vrsi znak po znak. */
  9.         i++; /*Nakon svakog pojedinacnog znaka varijabla "i" se povecava za 1 te broji koliko smo znakova do sad unijeli.*/
  10.         if (i==vel) break; /*Da ne bi pokazivac pokazivao na neko nepoznato mjesto u memoriji (kako smo rezervisali onoliko prostora koliko nam je potrebno za niz a ne vise, neki drugi program je mogao rezervisati prostor koji se nalazi pored samog niza) te samim tim doveo i do moguceg rusenja programa i sl. petlja se automatski prekida ukoliko je "i" jednako velicini niza. */
  11.     }
  12.     while (*(string-1) != '\n'); /*Ili se prekida na enter. */
  13.     *(string-1) = '\0'; /*Na kraju, preko znaka za novi red (koji smo unijeli enterom) stavljamo znak koji oznacava kraj stringa (odnosno niza znakova). */
  14. }
  15. int izbroji(char* string, char znak)
  16. {
  17.     int b=0; /*Deklarisemo varijablu "b" koja ce nam sluziti kao brojac. */
  18.     while (*string!='\0') /*Sve dok dereferencirana vrijednost pokazivaca string ne bude jednaka znaku koji oznacava kraj stringa (odnosno niza znakova) izvrsava se dio koda unutar petlje. */
  19.     {
  20.         if (*string++ == znak) /*Ukoliko je dereferencirana vrijednost pokazivaca "string" upravo ona koju trazimo, vrijednost varijable "b", tipa integer, se poveca za 1. Nakon provjere, a prije povecavanja vrijednosti varijable, pokazivac se "poveca" za 1, odnosno pokazuje na slijedece mjesto u memoriji. */
  21.             b++;
  22.  
  23.     }
  24.     return b;
  25. }
  26.     int samogl(char*string)
  27.     {
  28.         int d=0;
  29.         while (*string++!='\0') /*Sve isto kao i gore samo sto u ovom slucaju znamo koje to znakove treba prebrojati. */
  30.         {
  31.         if ((*string=='A') || (*string=='E') || (*string=='I') || (*string=='O') || (*string=='U') || (*string=='a') || (*string=='e') || (*string=='i') || (*string=='o') || (*string=='u'))
  32.         d++;
  33.  
  34.         }
  35.           return d;
  36.     }
  37.     int duzina(char *string)
  38.     {
  39.         int s=0; /*Isto kao i u prethodne dvije funkcije samo sto nemamo nikakvog uslova koji treba biti ispunjen kako bi se brojac povecao za 1 te na taj nacin ustvari brojimo na koliko ce mjesta pokazivac "string" pokazivati prije nego bude pokazivao na "\0". */
  40.         while (*string++!='\0') s++;
  41.         return s;
  42.     }
  43.     int main()
  44.     {
  45.         char a[80], c; /*"a[80]" - Deklarisemo niz od 80 znakova; "c" - Deklarisemo varijablu koja ce cuvati samo 1 znak."
  46.         printf ("\nUnesite jednu rijec do 80 znakova (ENTER za kraj): ");
  47.         unesi(a, 80); /*Pozivamo funkciju za unos stringa, proslijedjujemo joj niz a (odnosno adresu njegovog prvog elementa) i njegovu velicinu.*/
  48.         printf ("\nKoji znak treba prebrojati: ");
  49.         scanf ("%c", &c);
  50.         printf ("\n\nBroj znakova %c je: %d\n",c,izbroji(a,c));
  51.         printf("Unesena recenica/rijec sadrzi %d znakova.", duzina(a));
  52.         printf("\nBroj samoglasnika je: %d", samogl(a));
  53.         return 0;
  54.     }
Add Comment
Please, Sign In to add comment