Funkcja strtoll () w C ++ interpretuje zawartość ciągu jako liczbę całkowitą określonej bazy i zwraca jej wartość jako long long int.
Ta funkcja ustawia również wskaźnik tak, aby wskazywał na pierwszy znak po ostatnim prawidłowym znaku ciągu, jeśli taki istnieje, w przeciwnym razie wskaźnik jest ustawiony na null.
Dla podstawy 10 i ciągu „201xz $” Prawidłowa część numeryczna -> 201 Pierwszy znak po prawidłowej części numerycznej -> x
strtoll () prototyp (w standardzie C ++ 11)
long long int strtoll (const char * str, char ** end, int base);
Funkcja strtoll () przyjmuje jako parametr ciąg, wskaźnik do znaku i wartość całkowitą - base, interpretuje zawartość ciągu jako liczbę całkowitą podanej bazy i zwraca wartość long long int.
Ta funkcja jest zdefiniowana w pliku nagłówkowym.
strtoll () Parametry
- str: ciąg mający reprezentację liczby całkowitej.
- end: odwołanie do już przydzielonego obiektu typu char *. Wartość end jest ustawiana przez funkcję na następny znak w str po ostatnim prawidłowym znaku. Ten parametr może być również pustym wskaźnikiem, w którym to przypadku nie jest używany.
- podstawa: podstawa wartości całkowitej. Zestaw poprawnych wartości dla podstawy to (0, 2, 3,…, 35, 36).
strtoll () Zwracana wartość
Funkcja strtoll () zwraca:
- long long int (która jest konwertowana z ciągu).
- 0, jeśli nie można przeprowadzić żadnej prawidłowej konwersji.
Przykład 1: Jak działa funkcja 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 uruchomieniu programu wynik będzie następujący:
Wartość ciągu = 13,5ab_1x Long long int value = 13 End String = .5ab_1x String value = 13 Long long int value = 13 Null pointer
Prawidłowa liczba całkowita funkcji strtoll () składa się z:
- Opcjonalny znak + lub -.
- Prefiks 0 dla podstawy ósemkowej (ma zastosowanie tylko wtedy, gdy podstawa = 8 lub 0).
- Prefiks 0x lub 0X dla szesnastkowej podstawy (ma zastosowanie tylko wtedy, gdy podstawa = 16 lub 0).
- Sekwencja cyfr i / lub alfabetów (jeśli podstawa jest większa niż 10).
Poprawne wartości parametru base to (0, 2, 3,…, 35, 36). Zestaw prawidłowych cyfr dla podstawy 2 to (0, 1), dla podstawy 3 to (0, 1, 2) i tak dalej.
W przypadku podstaw zaczynających się od 11 do 36 prawidłowe cyfry obejmują alfabety. Zbiór prawidłowych cyfr dla podstawy 11 to (0, 1,…, 9, A, a), dla podstawy 12 to (0, 1,…, 9, A, a, B, b) i tak dalej.
Przykład 2: funkcja strtoll () z różnymi bazami
#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 uruchomieniu programu wynik będzie następujący:
23ajz do Long Long Int z podstawą-7 = 17 End String = ajz 23ajz do Long Long Int z podstawą-20 = 17419 End String = z 23ajz do Long Long Int z podstawą-36 = 3512879 End String =
Funkcja strtoll () ignoruje wszystkie początkowe białe znaki, dopóki nie zostanie znaleziony główny znak niebędący białymi znakami.
Ogólnie rzecz biorąc, prawidłowy argument w postaci liczby całkowitej funkcji strtoll () ma następującą postać:
(białe znaki) (- | +) (0 | 0x) (znaki alfanumeryczne)
Następnie, zaczynając od tego znaku, pobiera jak najwięcej znaków, które tworzą prawidłową reprezentację liczb całkowitych i konwertują je na wartość typu long long int. Cokolwiek pozostało z ciągu po ostatnim prawidłowym znaku, jest ignorowane i nie ma wpływu na wynik.
Przykład 3: funkcja strtoll () dla wiodących białych znaków i nieprawidłowej konwersji
#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 uruchomieniu programu wynik będzie następujący:
25axbz do Long Long Int z podstawą-11 = 307 End String = xbz 110bcd do Long Long Int z podstawą-2 = 6 End String = bcd ax110.97 do Long Long Int z podstawą-10 = 0 End String = ax110.97
Jeśli podstawą jest 0, podstawa liczbowa jest określana automatycznie na podstawie formatu ciągu. Jeśli przedrostkiem jest 0, podstawą jest ósemkowa (8). Jeśli prefiks to 0x lub 0X, podstawą jest szesnastkowa (16), w przeciwnym razie podstawa jest dziesiętna (10).
Przykład 4: funkcja strtoll () o podstawie 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 uruchomieniu programu wynik będzie następujący:
025x do Long Long Int z podstawą-0 = 21 End String = x 0xf1x do Long Long Int z podstawą-0 = 241 End String = x 15ab do Long Long Int z podstawą-0 = 15 End String = ab