C ++ strtol () - C ++ - vakiokirjasto

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

Strtol () -funktio C ++: ssa tulkitsee merkkijonon sisällön määritetyn tukiaseman integraaliluvuna ja palauttaa sen arvon pitkinä 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 "12abc": Voimassa oleva numeerinen osa -> 12 Ensimmäinen merkki voimassa olevan numeerisen osan jälkeen -> a

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

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

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

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

strtol () -parametrit

  • str: Merkkijono, jolla on integraaliluku.
  • end:Viittaus jo varattuun kohteeseen, 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 perusta. Pohjan kelvollisten arvojen joukko on (0, 2, 3,…, 35, 36).

strtol () Palautusarvo

Strtol () -funktio palauttaa:

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

Esimerkki 1: Kuinka strtol () toimii C ++: ssa?

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

Kun suoritat ohjelmaa, tulos on:

 Numero merkkijonossa = 27ab_1x Numero pitkässä keskiarvossa = 27 loppumerkkijono = ab_1x Numero merkkijonossa = 27 numero pitkässä keskiarvossa = 27 Nollaosoitin

Strtol () -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.

Huomaa: On tärkeää muistaa, että yhden kannan kelvollinen merkki voi päätyä toisen tukikohdan virheelliseen merkkijonoon, kuten alla olevassa esimerkissä.

Esimerkki 2: strtol () -funktio eri emäksillä

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

Kun suoritat ohjelmaa, tulos on:

 128bz - Long Int kanssa base-5 = 7 päätemerkkijono = 8bxz 128bz - Long Int with base-12 = 2123 End String = xz 128bz - Long Int with base-36 = 64214135 End string = 

Strtol () -funktio jättää huomiotta kaikki johtavat välilyönnin merkit, kunnes ensisijainen ei-tyhjämerkki löytyy.

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

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

Sitten tästä merkistä alkaen tarvitaan mahdollisimman monta merkkiä, jotka muodostavat kelvollisen kokonaislukuesityksen ja muuntaa ne 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: strtol () -toiminto välilyönnin ja virheellisen muunnoksen johtamiseen

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

Kun suoritat ohjelmaa, tulos on:

 25axbz - Long Int kanssa base-11 = 307 End String = xbz 110bcd - Long Int with base-2 = 6 End String = bcd ax110.97 - 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: strtol () -funktio perustan 0 kanssa

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

Kun suoritat ohjelmaa, tulos on:

0128ai - Long Int kanssa base-0 = 10 End String = 8ai 0x15axzz - Long Int with base-0 = 346 End String = xzz 23dfl - Long Int with base-0 = 23 End String = dfl 

Mielenkiintoisia artikkeleita...