C ++ strtol () - C ++ standardna knjižnica

Funkcija strtol () u C ++ interpretira sadržaj niza kao integralni broj navedene baze i vraća njegovu vrijednost kao long int.

Funkcija strtol () u C ++ interpretira sadržaj niza kao integralni broj navedene baze i vraća njegovu vrijednost kao long int. Ova funkcija također postavlja pokazivač koji pokazuje na prvi znak nakon zadnjeg važećeg znaka niza ako postoji, u suprotnom je pokazivač postavljen na nulu.

 Za bazu 10 i niz "12abc": Važeći numerički dio -> 12 Prvi znak nakon važećeg numeričkog dijela -> a

prototip strtol () (od C ++ 11 standarda)

 long int strtol (const char * str, char ** kraj, int baza);

Funkcija strtol () uzima parametar string, pokazivač na znak i cjelobrojnu vrijednost - base - bazu, interpretira sadržaj niza kao integralni broj zadane baze i vraća dugu int vrijednost.

Ova je funkcija definirana u zaglavnoj datoteci.

strtol () Parametri

  • str: Niz koji ima prikaz integralnog broja.
  • end:Referenca na već dodijeljeni objekt tipa char *. Vrijednost end funkcija postavlja na sljedeći znak u str nakon zadnjeg važećeg znaka. Ovaj parametar također može biti null pokazivač, u kojem se slučaju ne koristi.
  • base:Osnova integralne vrijednosti. Skup valjanih vrijednosti za bazu je (0, 2, 3,…, 35, 36).

strtol () Povratna vrijednost

Funkcija strtol () vraća:

  • dugačka int vrijednost (koja se pretvara iz niza).
  • 0 ako se nije mogla izvršiti valjana pretvorba.

Primjer 1: Kako strtol () radi u C ++?

 #include #include using namespace std; int main() ( int base = 10; char str() = "27ab_1x"; char *end; long int num; num = strtol(str, &end, base); cout << "Number in String = " << str << endl; cout << "Number in Long Int = " << num << endl; cout << "End String = " << end << endl << endl; // the pointer to invalid characters can be null strcpy(str, "27"); cout << "Number in String = " << str << endl; num = strtol(str, &end, base); cout << "Number in Long Int = " << num << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; ) 

Kada pokrenete program, izlaz će biti:

 Broj u nizu = 27ab_1x Broj u dugom Int = 27 Krajnji niz = ab_1x Broj u nizu = 27 Broj u dugom Int = 27 Null pokazivač

Valjana cijela vrijednost za funkciju strtol () sastoji se od:

  • Izborni znak + ili -.
  • Prefiks 0 za osminsku bazu (odnosi se samo kada je baza = 8 ili 0).
  • Prefiks 0x ili 0X za heksadecimalnu bazu (odnosi se samo kada je baza = 16 ili 0).
  • Slijed znamenki i / ili abeceda (ako je baza veća od 10).

Važeće vrijednosti za bazu parametara su (0, 2, 3,…, 35, 36). Skup valjanih znamenki za bazu 2 je (0, 1), za bazu 3 je (0, 1, 2) i tako dalje. Za baze koje počinju od 11 do 36, valjane znamenke uključuju abecedu. Skup valjanih znamenki za bazu 11 je (0, 1, …, 9, A, a), za bazu 12 je (0, 1, …, 9, A, a, B, b) i tako dalje.

Napomena: Važno je zapamtiti da valjani znak za jednu bazu može završiti u nevaljanom nizu za drugu bazu, kao u primjeru u nastavku.

Primjer 2: funkcija strtol () s različitim bazama

 #include #include #include using namespace std; int main() ( char *end; cout << "128bz" << " to Long Int with base-5 = " << strtol("128bxz", &end, 5) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-12 = " << strtol("128bxz", &end, 12) << endl; cout << "End String = " << end << endl << endl; cout << "128bz" << " to Long Int with base-36 = " << strtol("128bxz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )

Kada pokrenete program, izlaz će biti:

 128bz do Long Int s bazom-5 = 7 Krajnji niz = 8bxz 128bz do Long Int s bazom-12 = 2123 Krajnji niz = xz 128bz do Long Int s bazom-36 = 64214135 Kraj string = 

Funkcija strtol () ignorira sve vodeće razmake dok se ne pronađe primarni znak koji nije razmak.

Općenito, valjani cjelobrojni argument za funkciju strtol () ima sljedeći oblik:

 (razmak) (- | +) (0 | 0x) (alfanumerički znakovi)

Zatim, počevši od ovog znaka, potrebno je što više znakova koji čine valjanu cjelobrojnu predstavu i pretvaraju ih u dugu int vrijednost. Sve što ostane od niza nakon zadnjeg važećeg znaka, zanemaruje se i nema utjecaja na rezultat.

Primjer 3: funkcija strtol () za vodeće razmake i nevaljanu pretvorbu

 #include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Int with base-11 = " << strtol(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Int with base-2 = " << strtol(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Int with base-10 = " << strtol("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )

Kada pokrenete program, izlaz će biti:

 25axbz u Long Int s bazom-11 = 307 Krajnji niz = xbz 110bcd u Long Int s bazom-2 = 6 Krajnji niz = bcd ax110.97 u Long Int s bazom-10 = 0 Krajnji niz = ax110.97 

Ako je osnova 0, numerička baza se automatski određuje gledanjem formata niza. Ako je prefiks 0, osnova je osmica (8). Ako je prefiks 0x ili 0X, baza je heksadecimalna (16), inače je baza decimalna (10).

Primjer 4: funkcija strtol () s bazom 0

 #include #include using namespace std; int main() ( char *end; /* octal base */ cout << "0128ai" << " to Long Int with base-0 = " << strtol("0128ai", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0x15axzz" << " to Long Int with base-0 = " << strtol("0x15axzz", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "23dfl" << " to Long Int with base-0 = " << strtol("23dfl", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )

Kada pokrenete program, izlaz će biti:

0128ai na Long Int s bazom-0 = 10 Krajnji niz = 8ai 0x15axzz na Long Int s bazom-0 = 346 Krajnji niz = xzz 23dfl na Long Int s bazom-0 = 23 Krajnji niz = dfl 

Zanimljivi članci...