Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Operatori de incrementare si decrementare

c


Operatori de incrementare si decrementare

Limbajul C ofera doi operatori neuzuali pentru incrementarea si
decrementarea variabilelor. Operatorul de incrementare ++
aduna 1 la operandul sau; operatorul de decrementare --
scade 1. Am folosit frecvent ++ pentru a incrementa variabi-
lele, de exemplu:

if (c == '\n')
++nl;

Aspectul neobisnuit al lui ++ si al lui -- este acela ca ei
pot fi folositi atit ca operatori prefix (inaintea variabilei,
ca in ++n) cit si ca operatori sufix (dupa variabila, ca in n++).
In ambele cazuri, efectul este incrementarea lui n. Dar expresia
++n il incrementeaza pe n inainte de a-i folosi valoarea, in timp
ce expresia n++, il incrementeaza pe n dupa ce a fost folo-
sita valoarea lui. Aceasta inseamna ca intr-un context in
care valoarea este folosita, si nu numai efectul, ++n si n++ sint
diferiti. Daca n este 5, atunci:

x = n++;

il face pe x egal cu 5, dar

x = ++n;

il face pe x egal cu 6. In ambele cazuri, n devine 6.
Operatorii de incrementare si decrementare se pot aplica numai
variabilelor. O expresie de tipul x = (i+j)++ este ilegala.
Intr-un context in care valoarea nu este folosita, ci
numai efectul de incrementare, ca in

if (c == '\n')
nl++;

alegeti modul prefix sau sufix dupa gustul dumneavoastra. Dar
exista totusi situatii in care unul sau altul este apelat
din adins. De exemplu, sa consideram functia squeeze(s,c) care
elimina toate aparitiile lui c din sirul s:

















squeeze (s,c) /* sterge toate aparitiile lui c din s */
char s[];
int c;


De fiecare data cind apare un caracter non-c el este copiat
in pozitia j curenta si numai dupa aceea j este incrementat
pentru a fi gata pentru urmatorul caracter. Aceasta constructie
este echivalenta cu urmatoarea:

if (s[i] != c)

Un alt exemplu de constructie similara este luata din functia
getline pe care am scris-o in Capitolul 1, in care putem inlocui

if (c == '\n'

cu mult mai compacta constructie:

if (c == '\n')
s[i++] = c;

Ca un al treilea exemplu functia strcat(s,t) care concatenea-
za sirul t la sfirsitul sirului s. strcat presupune ca exista
suficient spatiu in s pentru a pastra combinatia.


strcat (s,t) /* concateneaza pe t la sfirsitul lui s */
char s[], t[]; /* s trebuie sa fie suficient de mare */



Cum fiecare caracter este copiat din t in s, se aplica postfixul
++ atit lui i cit si lui j pentru a fi siguri ca sint pe
pozitie pentru urmatorul pas din bucla.

Exercitiul 2.3. Scrieti o alta versiune a lui squeeze(s1,
s2) care sterge fiecare caracter din s1 care se potriveste cu
vreun caracter din s2.

Exercitiul 2.4. Scrieti functia any(s1, s2) care returneaza
prima locatie din sirul s1 in care apare vreun c acter
din sirul s2, sau pe -1 daca s1 nu contine nici un caracter din
s2.




Document Info


Accesari: 4839
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )