C ++ strtol () - Стандартна бібліотека C ++

Функція strtol () в C ++ інтерпретує вміст рядка як інтегральний номер вказаної бази і повертає його значення як long int.

Функція strtol () в C ++ інтерпретує вміст рядка як інтегральний номер вказаної бази і повертає його значення як long int. Ця функція також встановлює покажчик, який вказує на перший символ після останнього дійсного символу рядка, якщо такий є, інакше вказівник встановлюється як нульовий.

 Для основи 10 і рядка "12abc": Дійсна числова частина -> 12 Перший символ після дійсної числової частини -> a

прототип strtol () (за стандартом C ++ 11)

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

Функція strtol () приймає рядок, вказівник на символ і ціле значення - base як свій параметр, інтерпретує вміст рядка як інтегральний номер заданої бази і повертає довге int значення.

Ця функція визначена у файлі заголовка.

Параметри strtol ()

  • str: Рядок, що представляє ціле число.
  • end:Посилання на вже виділений об'єкт типу char *. Значення end встановлюється функцією наступному символу в str після останнього дійсного символу. Цей параметр також може бути нульовим покажчиком, і в цьому випадку він не використовується.
  • base:Основа інтегральної величини. Набір допустимих значень для бази дорівнює (0, 2, 3,…, 35, 36).

strtol () Повертається значення

Функція strtol () повертає:

  • довге значення int (яке перетворюється із рядка).
  • 0, якщо не вдалося виконати дійсне перетворення.

Приклад 1: Як strtol () працює в 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; ) 

Коли ви запускаєте програму, результат буде:

 Число в рядку = 27ab_1x Кількість у довгому Int = 27 Кінцевий рядок = ab_1x Кількість у рядку = 27 Число в довгому Int = 27 Нульовий покажчик

Дійсне ціле значення для функції strtol () складається з:

  • Необов’язковий знак + або -.
  • Префікс 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: функція strtol () з різними основами

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

Коли ви запускаєте програму, результат буде:

 128bz до Long Int з base-5 = 7 End String = 8bxz 128bz до Long Int з base-12 = 2123 End String = xz 128bz до Long Int з base-36 = 64214135 End String = 

Функція strtol () ігнорує всі провідні пробіли, поки не буде знайдено основний непробіл.

Загалом, допустимий цілочисельний аргумент для функції strtol () має такий вигляд:

 (пробіли) (- | +) (0 | 0x) (буквено-цифрові символи)

Потім, починаючи з цього символу, потрібно якомога більше символів, які формують дійсне цілочисельне подання і перетворюють їх у довге значення int. Все, що залишилось від рядка після останнього дійсного символу, ігнорується і не впливає на результат.

Приклад 3: Функція strtol () для пропуску пробілів та недійсного перетворення

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

Коли ви запускаєте програму, результат буде:

 25axbz до Long Int з base-11 = 307 Кінцева рядка = xbz 110bcd до Long Int з base-2 = 6 Кінцева рядок = bcd ax110.97 до Long Int з base-10 = 0 Кінцева рядок = ax110.97 

Якщо основа дорівнює 0, числова база визначається автоматично, переглядаючи формат рядка. Якщо префікс дорівнює 0, основа - восьмерична (8). Якщо префікс 0x або 0X, основа є шістнадцятковою (16), в іншому випадку база є десятковою (10).

Приклад 4: Функція strtol () з базою 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; )

Коли ви запускаєте програму, результат буде:

0128ai до Long Int з базовою-0 = 10 Кінцева рядка = 8ai 0x15axzz до Long Int з base-0 = 346 Кінцева рядка = xzz 23dfl до Long Int з base-0 = 23 Кінцева рядка = dfl 

Цікаві статті...