C ++ strtol () - Biblioteca standard C ++

Funcția strtol () din C ++ interpretează conținutul unui șir ca un număr integral al bazei specificate și îi returnează valoarea ca un int lung.

Funcția strtol () din C ++ interpretează conținutul unui șir ca un număr integral al bazei specificate și îi returnează valoarea ca un int lung. Această funcție setează, de asemenea, un indicator pentru a indica primul caracter după ultimul caracter valid al șirului, dacă există, în caz contrar, indicatorul este setat la nul.

 Pentru baza 10 și șirul "12abc": partea numerică validă -> 12 Primul caracter după partea numerică validă -> a

strtol () prototip (Începând cu standardul C ++ 11)

 long int strtol (const char * str, char ** end, int base);

Funcția strtol () ia ca parametru șirul, un pointer către caracter și o valoare întreagă - bază, interpretează conținutul șirului ca număr integral al bazei date și returnează o valoare int lungă.

Această funcție este definită în fișierul antet.

strtol () Parametri

  • str: Un șir având reprezentarea unui număr întreg.
  • end:Referință la un obiect deja alocat de tipul char *. Valoarea de sfârșit este setată de funcție la următorul caracter din str după ultimul caracter valid. Acest parametru poate fi, de asemenea, un pointer nul, caz în care nu este utilizat.
  • base:Baza valorii integrale. Setul de valori valide pentru bază este (0, 2, 3, …, 35, 36).

strtol () Valoare returnată

Funcția strtol () returnează:

  • o valoare int lungă (care este convertită din șir).
  • 0 dacă nu s-a putut efectua o conversie validă.

Exemplul 1: Cum funcționează strtol () în 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; ) 

Când rulați programul, ieșirea va fi:

 Număr în șir = 27ab_1x Număr în lung Int = 27 Șir final = ab_1x Număr în șir = 27 Număr în lung Int = 27 Pointer nul

O valoare întreagă validă pentru funcția strtol () constă din:

  • Un semn opțional + sau -.
  • Un prefix 0 pentru baza octală (se aplică numai atunci când baza = 8 sau 0).
  • Un prefix 0x sau 0X pentru baza hexazecimală (se aplică numai atunci când baza = 16 sau 0).
  • O succesiune de cifre și / sau alfabete (dacă baza este mai mare de 10).

Valorile valide pentru baza parametrilor sunt (0, 2, 3, …, 35, 36). Un set de cifre valide pentru baza 2 este (0, 1), pentru baza 3 este (0, 1, 2) și așa mai departe. Pentru bazele care încep de la 11 la 36, ​​cifrele valide includ alfabete. Setul de cifre valide pentru baza 11 este (0, 1, …, 9, A, a), pentru baza 12 este (0, 1, …, 9, A, a, B, b) și așa mai departe.

Notă: Este important să ne amintim că un caracter valid pentru o bază poate ajunge în șirul nevalid pentru o altă bază ca în exemplul de mai jos.

Exemplul 2: funcția strtol () cu baze diferite

 #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; )

Când rulați programul, ieșirea va fi:

 128bz la Long Int cu baza-5 = 7 End String = 8bxz 128bz la Long Int cu base-12 = 2123 End String = xz 128bz la Long Int cu base-36 = 64214135 End String = 

Funcția strtol () ignoră toate caracterele de spațiu alb principal până când se găsește caracterul principal non-spațiu alb.

În general, un argument întreg valid pentru funcția strtol () are următoarea formă:

 (spațiu alb) (- | +) (0 | 0x) (caractere alfanumerice)

Apoi, începând de la acest caracter, este nevoie de cât mai multe caractere care formează o reprezentare întreagă validă și le convertește într-o valoare int lungă. Orice a rămas din șir după ultimul caracter valid este ignorat și nu are niciun efect asupra rezultatului.

Exemplul 3: funcția strtol () pentru spațiul alb principal și conversia invalidă

 #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; )

Când rulați programul, ieșirea va fi:

 25axbz la Int lung cu baza-11 = 307 End String = xbz 110bcd la Int lung cu baza-2 = 6 End String = bcd ax110.97 la Long Int cu bază-10 = 0 End String = ax110.97 

Dacă baza este 0, baza numerică este determinată automat, examinând formatul șirului. Dacă prefixul este 0, baza este octală (8). Dacă prefixul este 0x sau 0X, baza este hexazecimală (16), altfel baza este zecimală (10).

Exemplul 4: funcția strtol () cu baza 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; )

Când rulați programul, ieșirea va fi:

0128ai la Long Int cu baza-0 = 10 End String = 8ai 0x15axzz la Long Int cu base-0 = 346 End String = xzz 23dfl la Long Int cu base-0 = 23 End String = dfl 

Articole interesante...