Функція strtoll () в C ++ інтерпретує вміст рядка як інтегральний номер вказаної бази і повертає його значення як long long int.
Ця функція також встановлює покажчик, який вказує на перший символ після останнього дійсного символу рядка, якщо такий є, інакше вказівник встановлюється як нульовий.
Для основи 10 і рядка "201xz $" Дійсна числова частина -> 201 Перший символ після дійсної числової частини -> x
прототип strtoll () (за стандартом C ++ 11)
long long int strtoll (const char * str, char ** end, int base);
Функція strtoll () приймає рядок, вказівник на символ і ціле значення - base як свій параметр, інтерпретує вміст рядка як інтегральний номер даної бази і повертає довге довге значення int.
Ця функція визначена у файлі заголовка.
Параметри strtoll ()
- str: рядок, що представляє ціле число.
- end: Посилання на вже виділений об'єкт типу char *. Значення end встановлюється функцією наступному символу в str після останнього дійсного символу. Цей параметр також може бути нульовим покажчиком, і в цьому випадку він не використовується.
- основа: основа інтегральної величини. Набір допустимих значень для бази дорівнює (0, 2, 3,…, 35, 36).
strtoll () Повертається значення
Функція strtoll () повертає:
- довге довге значення int (яке перетворюється із рядка).
- 0, якщо не вдалося виконати дійсне перетворення.
Приклад 1: Як працює функція 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; )
Коли ви запускаєте програму, результат буде:
Значення рядка = 13.5ab_1x Long long int значення = 13 End String = .5ab_1x Значення рядка = 13 Long long int значення = 13 Нульовий покажчик
Дійсне ціле значення для функції strtoll () складається з:
- Необов’язковий знак + або -.
- Префікс 0 для вісімкової основи (застосовується лише тоді, коли основа = 8 або 0).
- Префікс 0x або 0X для шістнадцяткової бази (застосовується лише тоді, коли база = 16 або 0).
- Послідовність цифр та / або алфавітів (якщо основа більше 10).
Допустимими значеннями для бази параметрів є (0, 2, 3,…, 35, 36). Набір дійсних цифр для основи 2 - (0, 1), для основи 3 - (0, 1, 2) тощо.
Для баз, починаючи з 11 до 36, дійсними цифрами є алфавіти. Набір дійсних цифр для основи 11 дорівнює (0, 1, …, 9, A, a), для основи 12 - (0, 1, …, 9, A, a, B, b) тощо.
Приклад 2: функція strtoll () з різними основами
#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; )
Коли ви запускаєте програму, результат буде:
23ajz до Long Long Int з base-7 = 17 End String = ajz 23ajz до Long Long Int з base-20 = 17419 End String = z 23ajz до Long Long Int з base-36 = 3512879 End String =
Функція strtoll () ігнорує всі провідні пробіли, поки не буде знайдено основний непробіл.
Загалом, дійсний цілочисельний аргумент для функції strtoll () має такий вигляд:
(пробіли) (- | +) (0 | 0x) (буквено-цифрові символи)
Потім, починаючи з цього символу, потрібно якомога більше символів, які формують дійсне цілочисельне подання і перетворюють їх у довге довге значення int. Все, що залишилось від рядка після останнього дійсного символу, ігнорується і не впливає на результат.
Приклад 3: Функція strtoll () для виведення пробілів та недійсного перетворення
#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; )
Коли ви запускаєте програму, результат буде:
25axbz до Long Long Int з базою-11 = 307 Кінцева рядка = xbz 110bcd до Long Long Int з базою-2 = 6 Кінцева рядок = bcd ax110.97 до Long Long Int з базою-10 = 0 Кінцева рядок = ax110.97
Якщо основа дорівнює 0, числова база визначається автоматично, переглядаючи формат рядка. Якщо префікс дорівнює 0, основа - восьмерична (8). Якщо префікс 0x або 0X, основа є шістнадцятковою (16), в іншому випадку база є десятковою (10).
Приклад 4: Функція strtoll () з базою 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; )
Коли ви запускаєте програму, результат буде:
025x до Long Long Int з base-0 = 21 End String = x 0xf1x до Long Long Int з base-0 = 241 End String = x 15ab до Long Long Int з base-0 = 15 End String = ab