170 likes | 421 Views
STRINGOVI. Radili : Igor Miladinovic Marko Milankov Nikola Randjelovic. Sta je STRING ?.
E N D
STRINGOVI Radili: Igor Miladinovic Marko Milankov Nikola Randjelovic
Sta je STRING ? • String je jednodimenzionalniniztipa char. Da bi se znalogde se u nizuzavršava string dopisuje mu se takozvanizavšniiliNULLznak: '\0', koji je sastavnideostringa. Radsastringovimapredstavijaspecificannacinkorišćenjanizaznakova. ”hello”
String konstante Za C kompajler string konstanta je svaki niz znakova između navodnika. Znaci između navodnika plus završni znak se registruju u nizu susednih memorijskih lokacija. Zbog prisustva završnog znaka string konstanta "C“nije jednaka znakovnoj konstanti 'C', jer je "C" niz od dva znaka: 'C' i '\0'. Prazna string konstanta " " se sastoji samo od završnog znaka. • Inicijajizacija stringova: Stringovi se mogu inicijalizovati korišćenjem string konstanti. Na primer, operator static char s[]="IBMPC"; Inicijalizuje statički niz s datom string konstantom.. Ovaj način inicijalizacije predstavlja skraćeni oblik inicijalizacije niza 1 static char s[]={I,'B' :M',' ','P' ,'C' ,'\O'}; Ako bi se u inicijalizaciji izostavio završni znak to više ne bi bio string već samo niz znakova. Kao i kod drugih nizova, ime s predstavlja pokazivač na nulti element niza, tako da važi: 1 s=&s[0],*s='I', i *(s+1)=s[1]='B'
Učitavanje stringova Priučitavanjustringovatrebavoditiračuna o dvestvari: kakorezervisatimemorijuzačuvanjestringa i kakoprimenitifunkcijuzaučitavanjestringa. Na početkuradapotrebno je odreditimaksimalnudužinustringakojiće se učitavati da bi kompajlerdodeliotraženimemorijskiprestor. Učitavanje se možerealizovatipomoćudvebibliotečnefunkcijescanf () i gets ().
Primer ucitavanjastringa main() { char imel[50],ime2[60]; intbrojac,god; printf(Unesiteimeiprezime.\n”); brojac=scanf("%s%5s”,ime1,ime2); printf("Ucitanasu %d podatka: %s %s .\n" ,brojac,ime1,ime2); }
Ispisstringova Zaispisstringova se koristedvebibliotečkefunkcije puts() i printf(). Funkcija puts() ispisujesamostringove, a printf() možeispisivatimešovitepodatke. Dok se priispisustringasa puts() automatskiprelazinanovulinijuprikorišćenjuprintf() to se moranaznačitisa '\n'. Ova funkcijaimasamojedan argument - pokazivačnapočetnutačkustringa (ill podstringa) kojitrebaispisati. Ova fuinkcijaispisujesveznakepočev od tačkenakojupokazuje argumentfunkcije do završinogznaka ('\0') kogazamenjujeznakomza "novuliniju" tako da se posleispisastringaprelazinanovuliniju. Zaglavljefunkcije puts() imasledećioblik: int puts(char *string);
Primer stringovaNapisati program kojiispisuje string, u direktnomiinverznomporedku. #include <stdio.h> void main() { char s[]="IBMPC-486"; ......1 char *pok; .................2 pok=s;......................3 while (*pok) putchar(*pok++ );...........4 putchar('\n'); while (--pok>=s) putchar(*pok); .............5 putchar('\n'); .............6 getch(); }
Funkcije; • strlen(s) vraćadužinusvogargumenta s, isključujućizavršniznak ’\0’ • ucitaj_rec() ucitavaodpocetkatj. do krajaprvebelineili lim-1 karakter , cuvaga ‘\0’ • squeeze(s,c) uklanjasveprimerkeznaka c izstringa s • strcat(s, t) spaja string t nakrajstringa s. Funkcijastrcat() pretpostavljada u stringu s imadovoljnomestazaovukombinaciju. • atoi()
Funkcije; • reverse(s) preokreće string s u mestu . • itoa() ceo broj pretvara u nisku znakova (inverzna od atoi() ). • trim() klanja beline sa kraja s. • strindex(s, t) vraca indeks t-a u s-u, -1 ako ga nema. • atof(s) string s pretvara u njemuekvivalentanbrojsapokretnim zarezomdvostruketačnosti.
strlen(s) /* strlen: vraca duzinu od s */ intstrlen(char s[]){ inti; i=0; while( s[i]!='\0' ) i++; return i; } strlen() idrugefunkcijezastringovedeklarisanesu u zaglavlju <string.h>
ucitaj_rec() intucitaj_rec(char s[], intlim){ int c, i; for(i=0; i<lim-1 && (c=getchar())!=EOF) && c!='\n' && c!=' ' && c!='\t'; i++) s[i]=c; s[i]='\0'; return i; }
squeeze(s, c) /* squeeze: brisesve c iz s */ void squeeze( char s[], int c){ inti, j; for(i=j=0; s[i]!='\0'; i++) if(s[i]!=c) s[j++]=s[i]; s[j]='\0'; }
atoi() zapretvaranjestringa u njegovnumeričkiekvivalent. Ulazni string možedasadrživodećiprazanprostoriopcioniznak koraci: •preskočitiprazanprostor, akopostoji •pročitatiznakbroja, akopostoji •pročitaticelobrojnideoipretvoritiga
reverse(s) #include<string.h> /* reverse: obrce string s u mestu */ void reverse(char s[]) { int c, i, j; for( i= 0, j=strlen(s)-1; i<j; i++,j--) { c=s[i]; s[i]=s[j]; s[j]=c } }
KRAJ STRANICE : • http://book.tsp.edu.rs/mod/page/view.php?id=763 • http://poincare.matf.bg.ac.rs/~marija/p1/Programski%20jezik%20C%20Stringovi.pdf