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 в качестве параметра, интерпретирует содержимое строки как целое число данной базы и возвращает значение типа long int.

Эта функция определена в заголовочном файле.

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

  • str: Строка, имеющая представление целого числа.
  • end:Ссылка на уже выделенный объект типа char *. Значение end устанавливается функцией на следующий символ в строке после последнего допустимого символа. Этот параметр также может быть нулевым указателем, и в этом случае он не используется.
  • base:База интегрального значения. Набор допустимых значений для базы: (0, 2, 3,…, 35, 36).

strtol () Возвращаемое значение

Функция strtol () возвращает:

  • значение типа long 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 Число в длинном интервале = 27 Конечная строка = ab_1x Число в строке = 27 Число в длинном интервале = 27 Нулевой указатель

Допустимое целочисленное значение для функции strtol () состоит из:

  • Необязательный знак + или -.
  • Префикс 0 для восьмеричной основы (применяется только когда base = 8 или 0).
  • Префикс 0x или 0X для шестнадцатеричного основания (применяется только когда base = 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) (буквенно-цифровые символы)

Затем, начиная с этого символа, требуется как можно больше символов, которые образуют допустимое целочисленное представление и преобразуют их в значение типа long 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 End String = xbz 110bcd в Long Int с base-2 = 6 End String = bcd от ax110.97 до Long Int с base-10 = 0 End String = 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 с base-0 = 10 End String = 8ai 0x15axzz в Long Int с base-0 = 346 End String = xzz 23dfl в Long Int с base-0 = 23 End String = dfl 

Интересные статьи...