Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Operatori de incrementare si decrementare

c



+ Font mai mare | - Font mai mic



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.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1138
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved