Konvertovanje teksta u broj
Nemanja Trifunović (04.07.2005.) Jedno od najčešćih pitanja koje se provlači po forumima je: ako imamo string koji sadrži broj, kako da "pročitamo" koji je to broj? Ilustrovano kodom:
string tekst = "2";
int broj = PretvoriTekstUBroj(tekst); // broj => 2.

Kako?

Najčešći odgovor koji može da se čuje je upotreba funkcija C biblioteke kao što su atof i atoi. Problem sa ovim funkcijama je prijava greške: u slučaju da tekst nije broj, povratna vrednost je nula, baš kao i kad je korisnik zaista uneo nulu:
string buf;
cout << "Unesite ceo broj" << endl;
cin >> buf;
int broj = atoi(buf.c_str());
if (broj == 0)
{
    cout << "Ili je greska ili je stvarno nula - pojma nemam" << endl;
}

Mnogo bolje rešenje su funkcije kao što su strtod i strtol koje prijavljuju na kom mestu kod parsiranja stringa se javlja greška:
string buf;
cout << "Unesite ceo broj" << endl;
cin >> buf;
char* stop;
int broj = strtol(buf.c_str(), &stop, 10);
if (stop - buf.c_str() != buf.length())
{
    cout << "Ovo je definitivno greska" << endl;
}

Lično, najradije koristim Boost šablon funkciju lexical_cast koja ne zahteva petljanje sa pointerima, već u slučaju greške baca izuzetak:
string buf;
cout << "Unesite ceo broj" << endl;
cin >> buf;
try
{
  int broj = lexical_cast<int>(buf);
}
catch (bad_lexical_cast&)
{
// Greska
}

Kod VC++ 2003 i starijih kompajlera, treba napomenuti da konverzija iz "širokih" stringova (wstring) funkcijom lexical_cast radi samo ako se koristi kompajlerska opcija /Zc:wchar_t (treat wchar_t as built-in type). Ova opcija je kod VC++2005 podrazumevano uključena.

Dakle, konverzija teksta u brojeve jeste jednostavna - kad se zna par sitnica.

Dodajte novi komentar

Ime:  

Komentar:  


Koliko je 57 + 1 =    
 



Postojeći komentari