Strtoll () -funktionen i C ++ fortolker indholdet af en streng som et integreret antal af den angivne base og returnerer dens værdi som en lang lang int.
Denne funktion indstiller også en markør til at pege på det første tegn efter strengens sidste gyldige tegn, hvis der er nogen, ellers er markøren indstillet til null.
For base 10 og strengen "201xz $" Gyldig numerisk del -> 201 Første tegn efter gyldig numerisk del -> x
strtoll () prototype (pr. C ++ 11 standard)
lang lang int strolling (const char * str, char ** end, int base);
Strtoll () -funktionen tager streng, en markør til tegn og en heltalsværdi - base som parameter, fortolker strengens indhold som et integreret antal af den givne base og returnerer en lang lang int-værdi.
Denne funktion er defineret i headerfilen.
strtoll () Parametre
- str: En streng med repræsentation af et integralt tal.
- slut: Henvisning til et allerede tildelt objekt af typen char *. Værdien af slut indstilles af funktionen til næste tegn i str efter det sidste gyldige tegn. Denne parameter kan også være en nul pointer, i hvilket tilfælde den ikke bruges.
- base: Grundlaget for den integrerede værdi. Sættet med gyldige værdier for base er (0, 2, 3,…, 35, 36).
strtoll () Returværdi
Funktionen strtoll () returnerer:
- en lang lang int-værdi (som konverteres fra strengen).
- 0, hvis der ikke kunne udføres nogen gyldig konvertering.
Eksempel 1: Hvordan fungerer strtoll () -funktionen?
#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; )
Når du kører programmet, vil output være:
Strengværdi = 13.5ab_1x Lang lang int-værdi = 13 Slutstreng = .5ab_1x Strengværdi = 13 Lang lang int-værdi = 13 Nul pointer
En gyldig heltalværdi for strtoll () -funktionen består af:
- Et valgfrit + eller - tegn.
- Et præfiks 0 for oktal base (gælder kun når base = 8 eller 0).
- Et præfiks 0x eller 0X for hexadecimal base (gælder kun når base = 16 eller 0).
- En række af cifre og / eller alfabeter (hvis basen er større end 10).
De gyldige værdier for parameterbasen er (0, 2, 3,…, 35, 36). Et sæt gyldige cifre for base 2 er (0, 1), for base 3 er (0, 1, 2) og så videre.
For baser, der starter fra 11 til 36, inkluderer gyldige cifre alfabeter. Sættet med gyldige cifre for base 11 er (0, 1,…, 9, A, a), for base 12 er (0, 1,…, 9, A, a, B, b) og så videre.
Eksempel 2: strtoll () -funktion med forskellige baser
#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; )
Når du kører programmet, vil output være:
23ajz til Long Long Int med base-7 = 17 Endestreng = ajz 23ajz til Long Long Int med base-20 = 17419 Endestreng = z 23ajz til Long Long Int med base-36 = 3512879 Endestreng =
Funktionen strtoll () ignorerer alle de ledende blanktegn, indtil det primære ikke-hvide mellemrumstegn findes.
Generelt har et gyldigt heltalargument for strtoll () -funktionen følgende form:
(mellemrum) (- | +) (0 | 0x) (alfanumeriske tegn)
Derefter tager det så mange tegn som muligt fra denne karakter, der danner en gyldig heltalrepræsentation og konverterer dem til en lang lang int-værdi. Uanset hvad der er tilbage af strengen efter det sidste gyldige tegn ignoreres og har ingen indflydelse på resultatet.
Eksempel 3: strtoll () -funktion til førende mellemrum og ugyldig konvertering
#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; )
Når du kører programmet, vil output være:
25axbz til Long Long Int med base-11 = 307 Endestreng = xbz 110bcd til Long Long Int med base-2 = 6 Endestreng = bcd ax110.97 til Long Long Int med base-10 = 0 Endestreng = ax110.97
Hvis basen er 0, bestemmes den numeriske base automatisk ved at se på strengens format. Hvis præfikset er 0, er basen oktal (8). Hvis præfikset er 0x eller 0X, er basen hexadecimal (16), ellers er basen decimal (10).
Eksempel 4: strtoll () -funktion med base 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; )
Når du kører programmet, vil output være:
025x til Long Long Int med base-0 = 21 Endestreng = x 0xf1x til Long Long Int med base-0 = 241 Endestreng = x 15ab til Long Long Int med base-0 = 15 Endstreng = ab