Функцията 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 () приема низ, указател към символ и целочислена стойност - база като свой параметър, интерпретира съдържанието на низ като интегрален номер на дадената база и връща дълга стойност 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 за шестнадесетична основа (важи само когато 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) (буквено-цифрови знаци)
След това, започвайки от този знак, са необходими колкото се може повече символи, които формират валидно цяло число и ги преобразуват в дълга 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 с base-0 = 10 End String = 8ai 0x15axzz до Long Int с base-0 = 346 End String = xzz 23dfl до Long Int с base-0 = 23 End String = dfl