C ++ strtoll () - C ++ - vakiokirjasto

Strtoll () -funktio C ++: ssa tulkitsee merkkijonon sisällön määritetyn tukiaseman integraaliluvuna ja palauttaa sen arvon pitkään pitkään int.

Tämä toiminto asettaa myös osoittimen osoittamaan merkkijonon viimeisen kelvollisen merkin jälkeistä ensimmäistä merkkiä, jos sellaista on, muuten osoitin asetetaan nollaksi.

 Pohjalle 10 ja merkkijonolle "201xz $" kelvollinen numeerinen osa -> 201 Ensimmäinen merkki kelvollisen numeerisen osan jälkeen -> x

strtoll () -prototyyppi (standardin C ++ 11 mukaan)

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

Strtoll () -funktio vie parametrina merkkijonon, osoittimen merkkiin ja kokonaislukuarvopohjan, tulkitsee merkkijonon sisällön annetun perustan kokonaisluvuksi ja palauttaa pitkän pitkän int-arvon.

Tämä toiminto on määritelty otsikkotiedostossa.

strtoll () -parametrit

  • str: Merkkijono, jolla on integraaliluku.
  • end: Viittaus jo allokoituun objektiin, jonka tyyppi on char *. Loppuarvon määrittää funktio seuraavalle merkille merkkijonossa viimeisen kelvollisen merkin jälkeen. Tämä parametri voi olla myös nollaosoitin, jolloin sitä ei käytetä.
  • base: Integraaliarvon pohja. Pohjan kelvollisten arvojen joukko on (0, 2, 3,…, 35, 36).

strtoll () Palautusarvo

Strtoll () -funktio palauttaa:

  • pitkä pitkä int-arvo (joka muunnetaan merkkijonosta).
  • 0, jos kelvollista muunnosta ei voitu suorittaa.

Esimerkki 1: Kuinka strtoll () -funktio toimii?

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

Kun suoritat ohjelmaa, tulos on:

 Merkkijonoarvo = 13,5ab_1x Pitkä pitkä int-arvo = 13 Loppumerkkijono = .5ab_1x Merkkijonoarvo = 13 Pitkä pitkä int-arvo = 13 Nollaosoitin

Strtoll () -funktion kelvollinen kokonaisluku koostuu:

  • Valinnainen + tai - merkki.
  • Etuliite 0 oktaalialustalle (pätee vain, kun perus = 8 tai 0).
  • Etuliite 0x tai 0X heksadesimaalitasolle (pätee vain, kun perusarvo = 16 tai 0).
  • Numerosarja ja / tai aakkoset (jos pohja on suurempi kuin 10).

Parametrikannan kelvolliset arvot ovat (0, 2, 3,…, 35, 36). Tukiaseman 2 kelvollisten numeroiden joukko on (0, 1), tukiasemalle 3 on (0, 1, 2) ja niin edelleen.

Alustojen 11-36 alussa voimassa olevat numerot sisältävät aakkoset. Tukiaseman 11 kelvollisten numeroiden joukko on (0, 1,…, 9, A, a), tukiasemalle 12 on (0, 1,…, 9, A, a, B, b) ja niin edelleen.

Esimerkki 2: strtoll () -funktio eri tukiasemilla

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

Kun suoritat ohjelmaa, tulos on:

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

Strtoll () -funktio jättää huomiotta kaikki johtavat välilyönnin merkit, kunnes ensisijainen muu kuin tyhjätavaramerkki löytyy.

Strtoll () -funktion kelvollinen kokonaisluku-argumentti on yleensä seuraavanlainen:

 (välilyönti) (- | +) (0 | 0x) (aakkosnumeeriset merkit)

Sitten tästä merkistä alkaen tarvitaan mahdollisimman monta merkkiä, joka muodostaa kelvollisen kokonaislukuesityksen ja muuntaa ne pitkäksi pitkäksi int-arvoksi. Merkkijonosta jäljellä oleva tieto viimeisen kelvollisen merkin jälkeen jätetään huomiotta, eikä sillä ole vaikutusta tulokseen.

Esimerkki 3: strtoll () -toiminto välilyönnin ja virheellisen muunnoksen johtamiseen

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

Kun suoritat ohjelmaa, tulos on:

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

Jos perusta on 0, numeerinen perusta määritetään automaattisesti merkkijonon muotoa tarkastelemalla. Jos etuliite on 0, pohja on oktaali (8). Jos etuliite on 0x tai 0X, perusta on heksadesimaali (16), muuten perusta on desimaali (10).

Esimerkki 4: strtoll () -funktio, jonka pohja on 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; )

Kun suoritat ohjelmaa, tulos on:

 025x - pitkä pitkä int kanssa base-0 = 21 päätemerkkijono = x 0xf1x - pitkä pitkä int kanssa base-0 = 241 loppu merkkijono = x 15ab - pitkä pitkä int kanssa base-0 = 15 loppu merkkijono = ab

Mielenkiintoisia artikkeleita...