Funcții de Conversie din Biblioteca în C++ 7
1. Introducere
Biblioteca <cstdlib> oferă funcții utile pentru conversia șirurilor de caractere (în stil C) în tipuri numerice și invers. Aceste funcții sunt esențiale pentru transformarea datelor în aplicații precum procesarea intrărilor utilizatorului sau manipularea fișierelor text.
2. Funcțiile de conversie principale
Funcție | Descriere | Exemplu |
atoi(sir) | Convertește un șir de caractere într-un întreg (int). | atoi(„123”) -> 123 |
atol(sir) | Convertește un șir de caractere într-un număr întreg lung (long). | atol(„123456789”) -> 123456789 |
atoll(sir) | Convertește un șir de caractere într-un număr întreg lung lung (long long). | atoll(„123456789123456789”) |
atof(sir) | Convertește un șir de caractere într-un număr cu virgulă mobilă (double). | atof(„123.45”) -> 123.45 |
strtol(sir, endptr, baza) | Convertește un șir de caractere într-un întreg lung (long), cu suport pentru baze diferite (ex: binar, octal, hexazecimal). | strtol(„101”, NULL, 2) -> 5 |
strtoll(sir, endptr, baza) | Convertește un șir de caractere într-un long long, cu suport pentru baze. | strtoll(„1A”, NULL, 16) -> 26 |
strtof(sir, endptr) | Convertește un șir de caractere într-un număr cu virgulă mobilă (float). | strtof(„3.14”, NULL) -> 3.14 |
strtod(sir, endptr) | Convertește un șir de caractere într-un double. | strtod(„2.718”, NULL) -> 2.718 |
strtold(sir, endptr) | Convertește un șir de caractere într-un long double. | strtold(„3.1415926535”, NULL) |
itoa(val, sir, baza) | Convertește un număr întreg (int) într-un șir de caractere, folosind o bază specificată. (non-standard în unele compilatoare). | itoa(255, sir, 16) -> „FF” |
3. Detalii despre funcții
1. Conversii simple: atoi, atof, atol
- Sunt cele mai simple funcții pentru conversia șirurilor într-un tip numeric.
- Exemplu:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
char sirInt[] = „123”;
char sirFloat[] = „456.78”;
int numarInt = atoi(sirInt);
double numarFloat = atof(sirFloat);
cout << „Numar intreg: ” << numarInt << endl;
cout << „Numar real: ” << numarFloat << endl;
return 0;
}
2. Conversii avansate: strtol, strtoll, strtof
- Aceste funcții permit control asupra bazei de conversie și a erorilor.
- Exemplu cu bază:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
char sirBinar[] = „101”;
char sirHexa[] = „1A”;
long numarBinar = strtol(sirBinar, NULL, 2); // Conversie binară
long numarHexa = strtol(sirHexa, NULL, 16); // Conversie hexazecimală
cout << „Numar binar: ” << numarBinar << endl;
cout << „Numar hexazecimal: ” << numarHexa << endl;
return 0;
}
- Exemplu cu pointer la rest:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
char sir[] = „123abc”;
char* endPtr;
long numar = strtol(sir, &endPtr, 10);
cout << „Numarul extras: ” << numar << endl;
cout << „Restul șirului: ” << endPtr << endl;
return 0;
}
3. Conversia inversă: itoa (non-standard)
- Convertiți un număr într-un șir folosind baza specificată.
- Exemplu:
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
int numar = 255;
char sir[20];
itoa(numar, sir, 16); // Conversie în hexazecimal
cout << „Numarul 255 în hexazecimal este: ” << sir << endl;
return 0;
}
4. Compararea funcțiilor simple cu cele avansate
Caracteristică | atoi, atof | strtol, strtof |
Suport pentru baze | Nu | Da |
Gestionarea erorilor | Nu | Da (endptr) |
Conversie parțială | Nu | Da |
5. Activități practice pentru elevi
- Scrieți un program care citește un șir conținând un număr hexazecimal și îl convertește într-un întreg.
- Realizați un program care transformă un șir în mai multe tipuri numerice (int, float, double).
- Implementați un program care verifică validitatea unui șir înainte de conversie (utilizând strtol și endptr).
6. Scheme logice
- Conversia unui șir într-un număr:
- Start -> Apel atoi sau strtol -> Returnare rezultat -> Stop.
- Conversia unui număr într-un șir:
- Start -> Apel itoa sau echivalent -> Returnare șir -> Stop.
7. Concluzie
- Funcțiile din <cstdlib> sunt esențiale pentru manipularea șirurilor și numerelor în stil C.
- Alegerea între funcțiile simple (atoi, atof) și cele avansate (strtol, strtof) depinde de complexitatea cerințelor.
- Este important să verificați validitatea șirurilor pentru a evita erorile de conversie.