Funkce strtoll () v C ++ interpretuje obsah řetězce jako celé číslo zadaného základu a vrátí jeho hodnotu jako dlouhý dlouhý int.
Tato funkce také nastaví ukazatel tak, aby ukazoval na první znak za posledním platným znakem řetězce, pokud existuje, jinak je ukazatel nastaven na null.
Pro základnu 10 a řetězec „201xz $“ Platná číselná část -> 201 První znak po platné číselné části -> x
strtoll () prototyp (od standardu C ++ 11)
long long int strtoll (const char * str, char ** end, int base);
Funkce strtoll () přebírá jako svůj parametr řetězec, ukazatel na znak a celočíselnou hodnotu - base, interpretuje obsah řetězce jako celé číslo dané báze a vrací dlouhou dlouhou int hodnotu.
Tato funkce je definována v hlavičkovém souboru.
strtoll () parametry
- str: Řetězec mající zastoupení celočíselného čísla.
- konec: Odkaz na již přidělený objekt typu char *. Hodnota end je nastavena funkcí na další znak v str za posledním platným znakem. Tento parametr může být také nulový ukazatel, v takovém případě se nepoužívá.
- base: Základ integrální hodnoty. Sada platných hodnot pro základnu je (0, 2, 3,…, 35, 36).
strtoll () Návratová hodnota
Funkce strtoll () vrací:
- dlouhá dlouhá hodnota int (která je převedena z řetězce).
- 0, pokud nelze provést platný převod.
Příklad 1: Jak funguje funkce 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; )
Když spustíte program, výstup bude:
Hodnota řetězce = 13.5ab_1x Dlouhá dlouhá int hodnota = 13 Koncový řetězec = .5ab_1x Hodnota řetězce = 13 Dlouhá dlouhá int hodnota = 13 Nulový ukazatel
Platná celočíselná hodnota pro funkci strtoll () se skládá z:
- Volitelné znaménko + nebo -.
- Předpona 0 pro osmičkový základ (platí pouze v případě, že základna = 8 nebo 0).
- Prefix 0x nebo 0X pro hexadecimální základnu (platí pouze v případě, že základna = 16 nebo 0).
- Posloupnost číslic a / nebo abeced (pokud je základna větší než 10).
Platné hodnoty pro základnu parametrů jsou (0, 2, 3,…, 35, 36). Sada platných číslic pro základnu 2 je (0, 1), pro základnu 3 je (0, 1, 2) atd.
U základen začínajících od 11 do 36 zahrnují platné číslice abecedy. Sada platných číslic pro základnu 11 je (0, 1,…, 9, A, a), pro základnu 12 je (0, 1, …, 9, A, a, B, b) atd.
Příklad 2: Funkce strtoll () s různými základnami
#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; )
Když spustíte program, výstup bude:
23ajz na Long Long Int se základnou-7 = 17 Koncový řetězec = ajz 23ajz na Long Long Int se základnou-20 = 17419 Koncový řetězec = z 23ajz na Long Long Int se základnou-36 = 3512879 Koncový řetězec =
Funkce strtoll () ignoruje všechny úvodní prázdné znaky, dokud není nalezen primární znak bez mezer.
Platný celočíselný argument pro funkci strtoll () má obecně následující tvar:
(mezery) (- | +) (0 | 0x) (alfanumerické znaky)
Poté, počínaje tímto znakem, trvá co nejvíce znaků, které tvoří platnou celočíselnou reprezentaci a převádí je na dlouhou dlouhou hodnotu int. Cokoli, co zbylo z řetězce po posledním platném znaku, je ignorováno a nemá to žádný vliv na výsledek.
Příklad 3: Funkce strtoll () pro vedení mezer a neplatný převod
#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; )
Když spustíte program, výstup bude:
25axbz na Long Long Int se základnou-11 = 307 End String = xbz 110bcd na Long Long Int se základnou-2 = 6 End String = bcd ax110.97 až Long Long Int se základnou-10 = 0 End String = ax110.97
Pokud je základna 0, číselná základna se určí automaticky při pohledu na formát řetězce. Pokud je předpona 0, základ je osmičkový (8). Pokud je předpona 0x nebo 0X, základna je šestnáctková (16), jinak je základna desítková (10).
Příklad 4: funkce strtoll () se základnou 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; )
Když spustíte program, výstup bude:
025x na Long Long Int se základnou-0 = 21 End String = x 0xf1x na Long Long Int se základnou-0 = 241 End String = x 15ab na Long Long Int se základnou-0 = 15 End String = ab