You are on page 1of 11

Visoka tehnička škola strukovnih studija Novi Beograd

SEMINARSKI RAD
iz

PROGRAMIRANjA
TEMA: Funkcije za rad sa niskama

Mentor Prof. dr.Đorđe Dihovični

Student Pavlović Dejan 220/2010

Beograd 2012

2 Funkcije za rad sa niskama ( strignovi ) .Sadržaj 1 Programski jezik C 1.1 Prenos niza u f-ju 1.

Iz tog razloga oni se MENJAJU u okviru funkcije. int n) { int i. 5. #include <stdio. sizeof(a)/sizeof(int)). 4. 7. putchar(’\n’).1 Programski jezik C 1 1.demonstracija prenosa niza brojeva u funkciju. } main() { int a[] = {1. } .1 Prenos niza u f-ju Nizovi se prenose u funkciju tako što se prenese adresa njihovog početka. i++) printf("%d ". /* Ispisace se broj bajtova koje zauzima niz a */ printf("sizeof(a) . stampaj_niz(a.u okviru main : %d\n".u okviru fje : %d\n". for (i = 0. /* Obratite paznju na ovo : */ /* Ispisace se broj bajtova koje zauzima promenljiva tipa pokazivac na int */ printf("sizeof(a) . 9}.a[i]). sizeof(a)). i < n.h> void stampaj_niz(int a[]. 3. 6. 8. Primer 1 Funkcija za ispis niza brojeva . sizeof(a)). 2. Napomena: Sve nizove osim niski karaktera (stringova) neophodno je prenositi zajedno sa dimenzijom niza.

’a’.*/ void stampaj_nisku(char s[]) . možemo napisati: char s[]="Primer stringa". Pri tome je s niska od 15 karaktera: {’P’. #include <stdio.3. ’s’.6)). Na primer. ’\0’} Primer 3 Kakva je razlika izmežu ’s’ i "s"? ’s’ je karakter "s" je string ili niz od dva karaktera ’s’ i ’\0’. } Izlaz: Skalarno a*b= 98 1.7. ’r’. ’e’.int n). Konstante tipa niska se navode izmežu znakova navodnika.5.h> long mnozi(int x[]. printf("Skalarno a*b= %ld\n".6. ’r’. ’i’. } long mnozi(int x[ ].i<n. return suma.int n) { int i.Dejan Pavlović Izlaz: sizeof(a) . ’t’. ’n’.3}.demonstrira prenos niske karaktera u funkciju. main() { int a[]={1.b.4. Primer 4 Funkcija za ispis niske karaktera .int y[ ].2. for(i=0. ’i’.2 Funkcije za rad sa niskama (stringovima) Niska karaktera ili string je niz karaktera koji se završava karakterom ’\0’.h> /* Uz nisku karaktera nije potrebno prenositi dimenziju ukoliko se postuje dogovor da se svaka niska zavrsava karakterom ’\0’. b[]={8.u okviru fje : 4 Primer 2 Skalarni proizvod dva niza brojeva #include <stdio.mnozi(a. Napomena: Karakter ’\0’ ima ASCII vrednost 0 pa se može tumačiti kao logička vrednost "netačno". Format za ispis niske pomoću funkcije printf je %s.4.int y[].i++) suma=suma+x[i]*y[i]. ’g’. ’m’.5. ’r’. ’ ’.6}.u okviru main : 36 123456789 sizeof(a) . long suma=0.

s[i]!=’\0’. s[i] = ’\0’. a ne ceo niz */ void ucitaj_rec(char s[]) { int c. i = 0.h> /* Potrebno je zbog funkcije isspace */ /* Funkcija ucitava rec sa standardnog ulaza i smesta je u niz karaktera s.h> /* Funkcija ucitava ceo broj sa standardnog ulaza i smesta je u void ucitaj_broj(int x) { promenljivu x. Ona je definisana u okviru ctype.1. s[i]. */ } . Da li bi bio ispravan sledeći program: #include <stdio. } main() { /* Obavezno je alocirati memoriju za niz karaktera */ char s[100].h */ while (!isspace(c=getchar())) s[i++] = c. /* Format za ispis stringa se zadaje kao %s */ printf("%s\n". for (i = 0. i++) */ putchar(s[i]).2 Funkcije za rad sa niskama (stringovima) { } int i.h> #include <ctype. i++) /* s[i] ce biti netacno samo kada bude jednako sa ’\0’ ciji je ASCII /* Ovo je isto kao da smo napisali for(i = 0. Ovo uspeva zbog toga sto se po vrednosti prenosi adresa pocetka niza. #include <stdio. ucitaj_rec(s). */ main() { stampaj_nisku("Zdravo\n"). /* Funkcija isspace ispituje da li je karakter praznina (blanko. } Izlaz: Zdravo Primer 5 Funkcija za učitavanje reči sa ulaza u nisku karaktera. s). tabulator ili prelazak u novi red). kod 0.

Dejan Pavlović scanf("%d". } /* Napomena : razlikovati prethodnu petlju od dve ugnjezdjene for ( i = 0.. ) for ( j = duzina(s)-1.. s[i] = s[j].. zašto nije? Primer 6 obrni string .. ucitaj_broj(x). } petlje: . #include <stdio...obrće nisku karaktera. &x).. s[i]. obrni_string(s). j... j--) { int pom = s[i]. j = duzina_stringa(s)-1. moguce je koristiti standardnu funkciju */ int duzina_stringa(char s[]) { int i.. } return i. s[j] = pom. .. Ako ovo nije ispravno.. */ } main() { char s[] = "Zdravo svima". for (i = 0.h> /* Ova funkcija racuna duzinu date niske karaktera. printf("%s\n". i++. strlen /* Funkcija obrce nisku karaktera */ void obrni_string(char s[]) { int i. for (i = 0. } x).. i++) . Umesto nje. } main() { int x. printf("%d\n". i<j. s). .

*/ void kopiraj_string(char dest[].. strstr biblioteke string.1. i >= 0. s[i+1] = ’\0’. /* Ovo se moglo zapisati i kao: for (i = 0. i++) { if (a[i]==0) continue. i++) . src[i]!=’\0’.. strcmp. /* obradi } pozitivne elemente nekako*/ Primer 9 Izvršiti implementaciju funkcija strlen. for (i = 0. return i. i++) /* for (i = 0. s[i]. . Primer 8 for(i=0. strcpy.h> /* Izracunava duzinu stringa */ int duzina_stringa(char s[]) { int i. for (i = strlen(s)-1. i--) if (s[i] != ’ ’ && s[i] != ’\t’ && s[i] != ’\n’) break. char src[]) { int i.2 Funkcije za rad sa niskama (stringovima) Izlaz: amivs ovardZ Primer 7 Uklanja beline. sve dok nije iskopiran karakter ’\0’ for (i = 0. (dest[i]=src[i]) != ’\0’. } /* Kopira string src u string dest. strcat. tabulatore ili znak za kraj reda sa kraja stringa int ukloni(char s[]) { int i. Pretpostavlja da u dest ima dovoljno prostora. i++) dest[i]=src[i]. on prouzrokuje da se preže na sledeću iteraciju u petlji. } Continue se reže koristi. s[i]!=’\0’. i++) */ . /*Telo petlje je prazno*/ return i. /* Kopira karakter po karakter. */ . strchr.h #include <stdio. i<n.

s[i]==t[i]. a nismo nasli razliku */ return 0. odnosno -1 ukoliko s ne sadrzi c */ int string_char(char s[]. j++.ukoliko je s leksikografski iza t */ int uporedi_stringove(char s[]. /* s[i] i t[i] su prvi karakteri u kojima se niske razlikuju. } /* Pronalazi prvu poziciju karaktera c u stringu s. slicno funkciji kopiraj_string for (j = 0. Vraca : 0 . /* nikako else . Na osnovu njihovog odnosa. j. /* Pronalazimo kraj stringa s */ for (i = 0. odredjuje se odnos stringova */ return s[i] .Dejan Pavlović */ /* a ako se izostavi uslov != ’\0’. char t[]) { /* Petlja tece sve dok ne naidjemo na prvi razliciti karakter */ int i. s[i] = t[j]. for (i = 0.ukoliko je s leksikografski ispred t >0 . char c) { int i. for (i = 0. i++) . /* Vrsi se kopiranje. moze se zapisati for (i = 0.t[i]. s[i]. i++) if (s[i] == c) return i. i++) . char t[]) { int i. i++) . i++) if (s[i] == ’\0’) /* Naisli smo na kraj oba stringa. */ kao: } /* Nadovezuje string t na kraj stringa s. dest[i]=src[i]. Pretpostavlja da u s ima dovoljno prostora. */ } /* Vrsi leksikografsko poredjenje dva stringa. s[i].ukoliko su stringovi jednaki <0 . */ void nadovezi_stringove(char s[].

i--) if (s[i] == c) return i. i>0.1. Vraca poziciju na kojoj sub pocinje.1. /* Nije nadjeno */ return -1. } /* Proverava da li string str sadrzi string sub. odnosno -1 ukoliko s ne sadrzi c */ int string_poslednji_char(char s[]. i--) if (s[i] == c) return i. char sub[]) { int i. for (i = 0. j. } /* Pronalazi poslednju poziciju karaktera c u stringu s. i++) /* Poredimo sub sa str pocevsi od poziciji i sve dok ne naidjemo na razliku */ for (j = 0. odnosno -1 ukoliko ga nema */ int string_string(char str[]. return */ -1. /* Nije nadjeno */ return -1. */ /* Nije nadjeno */ return -1. char c) { /* Pronalazimo kraj stringa s */ int i. /* Krecemo od kraja i trazimo c unazad */ for (i--. str[i+j] == sub[j].2 Funkcije za rad sa niskama (stringovima) return -1. s[i]. /* Koristeci duzina_stringa : for (i = duzina_stringa(s) . /* Proveravamo da li sub pocinje na svakoj poziciji i */ for (i = 0. } . i>=0. str[i]. j++) /* Nismo naisli na razliku a ispitali smo sve karaktere niske sub */ if (sub[j+1]==’\0’) return i. i++) .

printf("%d\n". u). &niz). "ari")).Dejan Pavlović main() { char s[100].string_char("racunari". s[j]=’\0’. printf("%s\n". char c) { int i. printf("%s\n". "rac")).i++) if(s[i]!=c) s[j++]=s[i]. } main() { char niz[20]. "cna")). printf("%d\n".string_string("racunari". s[i]!=’\0’. printf("%d\n". nadovezi_stringove(s. . ’a’)). s). for(i=j=0. t). scanf("%c". } Izlaz: Zdravo Zdravo 4 5 0 5 2 -1 svima Primer 10 Funkcija koja uklanja znak c kad god se pojavi u stringu s. printf("%s\n". c). ’n’)). #include <stdio. printf("%d\n".string_string("racunari". printf("%d\n".string_poslednji_char("racunari". &c).string_string("racunari". kopiraj_string(s.j.string_string("racunari". s). printf("%d\n". char c. printf("Unesi karakter\n\n"). scanf("%s". niz). sazimanje(niz. char t[] = "Zdravo". "cun")).h> void sazimanje(char s[]. char u[] = " svima".

1.2 Funkcije za rad sa niskama (stringovima) Unesi i Unesi primer prmer karakter string .