C ++ strtol () - štandardná knižnica C ++

Funkcia strtol () v C ++ interpretuje obsah reťazca ako celé číslo zadanej bázy a vráti jeho hodnotu ako dlhý int.

Funkcia strtol () v C ++ interpretuje obsah reťazca ako celé číslo zadanej bázy a vráti jeho hodnotu ako dlhý int. Táto funkcia tiež nastaví ukazovateľ tak, aby ukazoval na prvý znak za posledným platným znakom reťazca, ak existuje, inak je ukazovateľ nastavený na hodnotu null.

 Pre základňu 10 a reťazec „12abc“: Platná číselná časť -> 12 Prvý znak za platnou číselnou časťou -> a

strtol () prototyp (od štandardu C ++ 11)

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

Funkcia strtol () vezme ako svoj parameter reťazec, ukazovateľ na znak a celočíselnú hodnotu - základ, interpretuje obsah reťazca ako celé číslo danej základne a vráti hodnotu long int.

Táto funkcia je definovaná v hlavičkovom súbore.

strtol () Parametre

  • str: Reťazec, ktorý má celé číslo.
  • end:Odkaz na už pridelený objekt typu char *. Hodnota end je nastavená funkciou na nasledujúci znak v str za posledným platným znakom. Týmto parametrom môže byť tiež nulový ukazovateľ, v takom prípade sa nepoužije.
  • base:Základ celočíselnej hodnoty. Sada platných hodnôt pre základňu je (0, 2, 3,…, 35, 36).

strtol () Návratová hodnota

Funkcia strtol () vráti:

  • dlhá hodnota int (ktorá sa prevedie z reťazca).
  • 0, ak nie je možné vykonať platný prevod.

Príklad 1: Ako funguje strtol () v C ++?

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

Po spustení programu bude výstup:

 Number in String = 27ab_1x Number in Long Int = 27 End String = ab_1x Number in String = 27 Number in Long Int = 27 Null pointer

Platná celočíselná hodnota pre funkciu strtol () pozostáva z:

  • Voliteľný znak + alebo -.
  • Predpona 0 pre osmičkový základ (platí iba v prípade, že základňa = 8 alebo 0).
  • Predpona 0x alebo 0X pre hexadecimálny základ (platí iba v prípade, že základňa = 16 alebo 0).
  • Postupnosť číslic a / alebo abecedy (ak je základňa väčšia ako 10).

Platné hodnoty pre základ parametrov sú (0, 2, 3,…, 35, 36). Sada platných číslic pre základňu 2 je (0, 1), pre základňu 3 je (0, 1, 2) atď. Pre základy začínajúce od 11 do 36 zahŕňajú platné číslice abecedy. Sada platných číslic pre základňu 11 je (0, 1, …, 9, A, a), pre základňu 12 je (0, 1, …, 9, A, a, B, b) atď.

Poznámka: Je dôležité mať na pamäti, že platný znak pre jednu základňu môže skončiť v neplatnom reťazci pre inú základňu, ako v príklade nižšie.

Príklad 2: funkcia strtol () s rôznymi bázami

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

Po spustení programu bude výstup:

 128 bz na Long Int so základňou-5 = 7 koncový reťazec = 8bxz 128 bz na Long Int so základňou-12 = 2123 koncový reťazec = xz 128 bz na Long Int so základňou-36 = 64214135 koncový reťazec = 

Funkcia strtol () ignoruje všetky vedúce medzery, kým sa nenájde primárny znak bez medzier.

Platný celočíselný argument pre funkciu strtol () má vo všeobecnosti tento tvar:

 (medzery) (- | +) (0 | 0x) (alfanumerické znaky)

Potom, počnúc týmto znakom, trvá čo najviac znakov, ktoré vytvoria platné celočíselné zastúpenie a prevedú ich na dlhú hodnotu int. Čokoľvek, čo zostane z reťazca po poslednom platnom znaku, je ignorované a nemá to žiadny vplyv na výsledok.

Príklad 3: funkcia strtol () na vedenie medzery a neplatnú konverziu

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

Po spustení programu bude výstup:

 25axbz na Long Int so základňou-11 = 307 koncový reťazec = xbz 110bcd na Long Int so základňou-2 = 6 koncový reťazec = bcd ax110.97 až Long Int so základňou-10 = 0 koncový reťazec = ax110.97 

Ak je báza 0, číselná báza sa určí automaticky pri pohľade na formát reťazca. Ak je predpona 0, základňa je osmičková (8). Ak je predpona 0x alebo 0X, základ je šestnástkový (16), inak je základ desatinný (10).

Príklad 4: funkcia strtol () so základňou 0

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

Po spustení programu bude výstup:

0128ai na Long Int so základňou-0 = 10 koncový reťazec = 8ai 0x15axzz na Long Int so základňou-0 = 346 koncový reťazec = xzz 23dfl na Long Int so základňou-0 = 23 koncový reťazec = dfl 

Zaujímavé články...