Funkcia strtoll () v C ++ interpretuje obsah reťazca ako celé číslo určenej bázy a vráti jeho hodnotu ako dlhý 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 „201xz $“ Platná číselná časť -> 201 Prvý znak za platnou číselnou časťou -> x
prototyp strtoll () (od štandardu C ++ 11)
long long int strtoll (const char * str, char ** end, int base);
Funkcia strtoll () 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 dlhú dlhú hodnotu int.
Táto funkcia je definovaná v hlavičkovom súbore.
parametre strtoll ()
- str: Reťazec, ktorý má celé číslo.
- koniec: 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).
strtoll () Vrátená hodnota
Funkcia strtoll () vráti:
- dlhá dlhá hodnota int (ktorá sa prevedie z reťazca).
- 0, ak nie je možné vykonať platný prevod.
Príklad 1: Ako funguje funkcia strtoll ()?
#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; )
Po spustení programu bude výstup:
Hodnota reťazca = 13.5ab_1x Dlhá dlhá int hodnota = 13 Koncový reťazec = .5ab_1x Hodnota reťazca = 13 Dlhá dlhá int hodnota = 13 Nulový ukazovateľ
Platná celočíselná hodnota pre funkciu strtoll () 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ď.
Príklad 2: Funkcia strtoll () s rôznymi bázami
#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; )
Po spustení programu bude výstup:
23ajz na Long Long Int so základňou-7 = 17 Koncový reťazec = ajz 23ajz na Long Long Int so základňou-7 = 17 Koncový reťazec = z 23ajz na Long Long Int so základňou-36 = 3512879 Koncový reťazec =
Funkcia strtoll () ignoruje všetky vedúce medzery, kým sa nenájde primárny znak bez medzier.
Platný celočíselný argument pre funkciu strtoll () 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ú 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 strtoll () na vedenie medzery a neplatnú konverziu
#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; )
Po spustení programu bude výstup:
25axbz na Long Long Int so základňou-11 = 307 koncový reťazec = xbz 110bcd na Long Long Int so základňou-2 = 6 koncový reťazec = bcd ax110.97 až Long 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 strtoll () so základňou 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; )
Po spustení programu bude výstup:
025x na Long Long Int so základňou-0 = 21 koncový reťazec = x 0xf1x na Long Long Int so základňou-0 = 241 koncový reťazec = x 15ab na Long Long Int so základňou-0 = 15 koncový reťazec = ab