C ++ strtoll () - C ++ standaardbibliotheek

De functie strtoll () in C ++ interpreteert de inhoud van een string als een geheel getal van de opgegeven basis en retourneert de waarde ervan als een lange lange int.

Deze functie stelt ook een pointer zo in dat deze naar het eerste karakter wijst na het laatste geldige karakter van de string, als die er is, anders wordt de pointer op null gezet.

 Voor grondtal 10 en de string "201xz $" Geldig numeriek deel -> 201 Eerste teken na geldig numeriek deel -> x

strtoll () prototype (vanaf C ++ 11 standaard)

 lange lange int strtoll (const char * str, char ** end, int base);

De functie strtoll () neemt string, een pointer naar karakter en een integer-waarde - base als parameter, interpreteert de inhoud van string als een integraal getal van de gegeven basis en retourneert een lange lange int-waarde.

Deze functie is gedefinieerd in het header-bestand.

strtoll () Parameters

  • str: een tekenreeks met de weergave van een geheel getal.
  • end: verwijzing naar een reeds toegewezen object van het type char *. De waarde van end wordt door de functie ingesteld op het volgende teken in str na het laatste geldige teken. Deze parameter kan ook een null-pointer zijn, in welk geval deze niet wordt gebruikt.
  • basis: de basis van de integrale waarde. De reeks geldige waarden voor het grondtal is (0, 2, 3,…, 35, 36).

strtoll () Retourwaarde

De functie strtoll () retourneert:

  • een lange lange int-waarde (die wordt geconverteerd uit de tekenreeks).
  • 0 als er geen geldige conversie kon worden uitgevoerd.

Voorbeeld 1: Hoe werkt strtoll () functie?

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

Wanneer u het programma uitvoert, is de uitvoer:

 Stringwaarde = 13.5ab_1x Lange lange int-waarde = 13 End String = .5ab_1x Stringwaarde = 13 Lange lange int-waarde = 13 Null-pointer

Een geldige integerwaarde voor de functie strtoll () bestaat uit:

  • Een optioneel + of - teken.
  • Een voorvoegsel 0 voor octaal grondtal (alleen van toepassing als grondtal = 8 of 0).
  • Een voorvoegsel 0x of 0X voor hexadecimaal grondtal (alleen van toepassing als grondtal = 16 of 0).
  • Een reeks cijfers en / of alfabetten (als het grondtal groter is dan 10).

De geldige waarden voor de parameterbasis zijn (0, 2, 3,…, 35, 36). Een reeks geldige cijfers voor basis 2 is (0, 1), voor basis 3 is (0, 1, 2) enzovoort.

Voor basissen die beginnen met 11 tot 36, zijn geldige cijfers inclusief alfabetten. De reeks geldige cijfers voor basis 11 is (0, 1, …, 9, A, a), voor basis 12 is (0, 1, …, 9, A, a, B, b) enzovoort.

Voorbeeld 2: strtoll () functie met verschillende bases

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

Wanneer u het programma uitvoert, is de uitvoer:

 23ajz tot Long Long Int met base-7 = 17 End String = ajz 23ajz tot Long Long Int met base-20 = 17419 End String = z 23ajz tot Long Long Int met base-36 = 3512879 End String =

De functie strtoll () negeert alle leidende witruimtetekens totdat het primaire niet-witruimteteken is gevonden.

Over het algemeen heeft een geldig integer-argument voor de functie strtoll () de volgende vorm:

 (witruimte) (- | +) (0 | 0x) (alfanumerieke tekens)

Vervolgens, beginnend bij dit teken, zijn er zoveel mogelijk tekens nodig die een geldige integer-representatie vormen en deze omzetten in een lange lange int-waarde. Wat er overblijft van de string na het laatste geldige teken wordt genegeerd en heeft geen effect op het resultaat.

Voorbeeld 3: strtoll () functie voor voorloopspaties en ongeldige conversie

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

Wanneer u het programma uitvoert, is de uitvoer:

 25axbz tot Long Long Int met base-11 = 307 End String = xbz 110bcd tot Long Long Int met base-2 = 6 End String = bcd ax110.97 tot Long Long Int met base-10 = 0 End String = ax110.97

Als het grondtal 0 is, wordt het numerieke grondtal automatisch bepaald door naar het formaat van de string te kijken. Als het voorvoegsel 0 is, is de basis octaal (8). Als het voorvoegsel 0x of 0X is, is de basis hexadecimaal (16), anders is de basis decimaal (10).

Voorbeeld 4: strtoll () functie met grondtal 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; )

Wanneer u het programma uitvoert, is de uitvoer:

 025x tot Long Long Int met base-0 = 21 End String = x 0xf1x tot Long Long Int met base-0 = 241 End String = x 15ab tot Long Long Int met base-0 = 15 End String = ab

Interessante artikelen...