Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C
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++;