17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

main ( ) {<br />

char linie[128], * cuv; // adresa cuvant in linie<br />

char *sep=“.,;\t\n “ // sir de caractere separator<br />

gets(linie); // citire linie<br />

cuv=strtok (linie,sep); // primul cuvant din linie<br />

while ( cuv !=NULL) {<br />

puts (cuv); // scrie cuvant<br />

cuv=strtok(0,sep); // urmatorul cuvant din linie<br />

}<br />

}<br />

Functia “strtok” are ca rezultat un pointer la urmãtorul cuvânt din linie si adaugã<br />

un octet zero la sfârsitul acestui cuvânt, dar nu mutã la altã adresã cuvintele din text.<br />

Acest pointer este o variabilã localã staticã <strong>în</strong> functia “strtok”, deci o variabilã care îsi<br />

pãstreazã valoarea <strong>în</strong>tre apeluri succesive.<br />

Exemplu de implementare a functiei “strtok” cu variabilã staticã :<br />

char *strtok (char * sir,char *separ) {<br />

static char *p; // p este o variabila staticã !<br />

char * r;<br />

if (sir) p=sir; // la primul apel<br />

while (strchr(separ,*p) && *p ) // ignora separatori intre atomi<br />

p++;<br />

if (*p=='\0') return NULL; // dacã s-a ajuns la sfârsitul sirului analizat<br />

r=p; // r = adresa unde incepe un atom<br />

while (strchr(separ,*p)==NULL && *p) // caractere din atomul curent<br />

p++;<br />

if (p==r) return NULL; // p = prima adresa dupa atom<br />

else {<br />

*p++='\0'; return r; // termina atom cu octet zero<br />

}<br />

}<br />

Extragerea de cuvinte este o operatie frecventã, dar functia “strtok” trebuie folositã<br />

cu atentie deoarece modificã sirul primit si nu permite analiza <strong>în</strong> paralel a douã sau<br />

mai multe siruri. De aceea este preferabilã o altã functie, cum ar fi urmãtoarea:<br />

char * stok (char * sir, char *tok) { // depune urmatorul atom la adresa “tok’<br />

char * r, *p=sir ;<br />

// ignora separatori intre atomi<br />

while ( *p && *p ==' ')<br />

p++;<br />

if (*p=='\0') return 0;<br />

r=p; // r= adresa de inceput token<br />

// caractere din token<br />

while (*p && *p !=' ')<br />

p++;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!