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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

elimine un caracter dintr-un sir, care sã insereze un caracter <strong>în</strong>tr-un sir sau care sã<br />

extragã un subsir dintr-o pozitie datã a unui sir.<br />

La definirea unor noi functii pentru operatii pe siruri programatorul trebuie sã<br />

asigure adãugarea terminatorului de sir la rezultatul functiei, pentru respectarea<br />

conventiei si evitarea unor erori. Exemplu:<br />

// transforma un intreg intr-un sir de caractere (cifre in baza radix)<br />

char *itoa(int value, char *string, int radix) { // acelasi prototip cu functia<br />

standard<br />

char digits[] = "0123456789ABCDEF"; // dar “radix” poate fi cel mult 16<br />

char t[20], *tt=t, * s=string; // adresa “string” se modifica !<br />

do {<br />

*tt++ = digits [value % radix]; // sau: t[i++] = digits [value/radix];<br />

} while ( (value = value / radix) != 0 );<br />

while ( tt != t) // copiere de la tt la string in ordine inversa<br />

*string++= *(--tt);<br />

*string=0; // adauga terminator de sir<br />

return s; // rezultatul este adresa sirului creat<br />

}<br />

Functiile care produc ca rezultat un nou sir primesc o adresã (un pointer), unde se<br />

depune sirul creat <strong>în</strong> functie. Functia urmãtoare modificã sau adaugã o extensie datã la<br />

un nume de fisier, fãrã sã modifice numele primit:<br />

char* modext (char* oldfile, char* newfile, char *ext) {<br />

char * p;<br />

strcpy(newfile,oldfile);<br />

p =strrchr(newfile,'.'); // cauta pozitia ultimului punct din nume<br />

if (p==NULL) // daca nu are extensie<br />

strcat( strcat(newfile,"."),ext); // atunci se adauga extensia “ext”<br />

else // daca avea o extensie<br />

strcpy (p+1,ext); // atunci se inlocuieste cu extensia “ext’<br />

return newfile; // dupa modelul functiilor standard strcpy,…<br />

}<br />

Functia care apeleazã pe “modext” trebuie sã asigure suficientã memorie la adresa<br />

“newfile”, dar compilatorul nu poate verifica aceastã conditie. Exemplu:<br />

int main ( ) {<br />

char fname[]= “prog.com”, ext[]= ”exe”;<br />

char file[80]; // extensie la nume fisier (tip fisier)<br />

modext (fname, file,ext); // modificare extensie<br />

puts(file); // afisare ptr verificare<br />

}<br />

O eroare posibilã si care trece de compilare ar fi fost urmãtoarea declaratie:

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

Saved successfully!

Ooh no, something went wrong!