Funcția strtoll () din C ++ interpretează conținutul unui șir ca un număr integral al bazei specificate și îi returnează valoarea ca un int lung 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 "201xz $" Partea numerică validă -> 201 Primul caracter după partea numerică validă -> x
strtoll () prototype (Începând cu standardul C ++ 11)
long long int strtoll (const char * str, char ** end, int base);
Funcția strtoll () ia șir, un pointer către caracter și o valoare întreagă - bază ca parametru, interpretează conținutul șirului ca un număr integral al bazei date și returnează o valoare int lungă.
Această funcție este definită în fișierul antet.
strtoll () Parametri
- str: Un șir având reprezentarea unui număr întreg.
- final: 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.
- baza: baza valorii integrale. Setul de valori valide pentru bază este (0, 2, 3, …, 35, 36).
strtoll () Valoare returnată
Funcția strtoll () returnează:
- o valoare int lungă lungă (care este convertită din șir).
- 0 dacă nu s-a putut efectua o conversie validă.
Exemplul 1: Cum funcționează funcția strtoll ()?
#include #include #include using namespace std; int main() ( int base = 10; char numberString() = "13.5ab_1x"; char *end; long long int number; number = strtoll(numberString, &end, base); cout << "String value = " << numberString << endl; cout << "Long long int value = " << number << endl; cout << "End String = " << end << endl; strcpy(numberString, "13"); cout << "String value = " << numberString << endl; number = strtoll(numberString, &end, base); cout << "Long long int value = " << number << endl; if (*end) ( cout << end; ) else ( cout << "Null pointer"; ) return 0; )
Când rulați programul, ieșirea va fi:
Valoare șir = 13,5ab_1x Valoare lungă lungă int = 13 Sfârșit șir = .5ab_1x Valoare șir = 13 Valoare lungă lungă int = 13 Pointer nul
O valoare întreagă validă pentru funcția strtoll () 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.
Exemplul 2: funcția strtoll () cu baze diferite
#include #include using namespace std; int main() ( char *end; cout << "23ajz" << " to Long Long Int with base-7 = " << strtoll("23ajz", &end, 7) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-20 = " << strtoll("23ajz", &end, 20) << endl; cout << "End String = " << end << endl << endl; cout << "23ajz" << " to Long Long Int with base-36 = " << strtoll("23ajz", &end, 36) << endl; cout << "End String = " << end << endl << endl; return 0; )
Când rulați programul, ieșirea va fi:
23ajz la Long Long Int cu baza-7 = 17 End String = ajz 23ajz la Long Long Int cu base-20 = 17419 End String = z 23ajz la Long Long Int cu base-36 = 3512879 End String =
Funcția strtoll () ignoră toate caracterele principale ale spațiului alb până când se găsește caracterul principal non-spațiu.
În general, un argument întreg valid pentru funcția strtoll () 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 strtoll () pentru spațiul alb principal și conversia invalidă
#include #include using namespace std; int main() ( char *end; cout << " 25axbz" << " to Long Long Int with base-11 = " << strtoll(" 25axbz", &end, 11) << endl; cout << "End String = " << end << endl << endl; cout << " 110bcd" << " to Long Long Int with base-2 = " << strtoll(" 110bcd", &end, 2) << endl; cout << "End String = " << end << endl << endl; cout << "ax110.97" << " to Long Long Int with base-10 = " << strtoll("ax110.97", &end, 10) << endl; cout << "End String = " << end << endl << endl; return 0; )
Când rulați programul, ieșirea va fi:
25axbz la Long Long Int cu baza-11 = 307 End String = xbz 110bcd la Long Long Int cu base-2 = 6 End String = bcd ax110.97 la Long Long Int cu base-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 strtoll () cu baza 0
#include #include using namespace std; int main() ( char *end; /* octal base */ cout << "025x" << " to Long Long Int with base-0 = " << strtoll("025x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* hexadecimal base */ cout << "0xf1x" << " to Long Long Int with base-0 = " << strtoll("0xf1x", &end, 0) << endl; cout << "End String = " << end << endl << endl; /* decimal base */ cout << "15ab" << " to Long Long Int with base-0 = " << strtoll("15ab", &end, 0) << endl; cout << "End String = " << end << endl << endl; return 0; )
Când rulați programul, ieșirea va fi:
025x la Long Long Int cu baza-0 = 21 End String = x 0xf1x la Long Long Int cu base-0 = 241 End String = x 15ab la Long Long Int cu base-0 = 15 End String = ab