Localization library | |||||||||||||||||||||||||
Regular expressions library(C++11) | |||||||||||||||||||||||||
Formatting library(C++20) | |||||||||||||||||||||||||
Null-terminated sequence utilities | |||||||||||||||||||||||||
Byte strings | |||||||||||||||||||||||||
Multibyte strings | |||||||||||||||||||||||||
Wide strings | |||||||||||||||||||||||||
Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Text encoding identifications | |||||||||||||||||||||||||
|
Functions | ||||||||||||||||||||||||||||||||||||
Character classification | ||||||||||||||||||||||||||||||||||||
Character manipulation | ||||||||||||||||||||||||||||||||||||
Conversions to numeric formats | ||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||
String manipulation | ||||||||||||||||||||||||||||||||||||
String examination | ||||||||||||||||||||||||||||||||||||
Character array functions | ||||||||||||||||||||||||||||||||||||
Miscellaneous | ||||||||||||||||||||||||||||||||||||
Defined in header <cstdlib> | ||
int atoi(constchar* str); | (1) | |
long atol(constchar* str); | (2) | |
longlong atoll(constchar* str); | (3) | (since C++11) |
Interprets an integer value in a byte string pointed to bystr. The implied radix is always 10.
Discards any whitespace characters until the first non-whitespace character is found, then takes as many characters as possible to form a valid integer number representation and converts them to an integer value. The valid integer value consists of the following parts:
If the value of the result cannot be represented, i.e. the converted value falls out of range of the corresponding return type, the behavior is undefined.
Contents |
str | - | pointer to the null-terminated byte string to be interpreted |
Integer value corresponding to the contents ofstr on success.
If no conversion can be performed,0 is returned.
template<typename T>T atoi_impl(constchar* str){while(std::isspace(static_cast<unsignedchar>(*str)))++str; bool negative=false; if(*str=='+')++str;elseif(*str=='-'){++str; negative=true;} T result=0;for(;std::isdigit(static_cast<unsignedchar>(*str));++str){int digit=*str-'0'; result*=10; result-= digit;// calculate in negatives to support INT_MIN, LONG_MIN,..} return negative? result:-result;} int atoi(constchar* str){return atoi_impl<int>(str);} long atol(constchar* str){return atoi_impl<long>(str);} longlong atoll(constchar* str){return atoi_impl<longlong>(str);} |
Actual C++ library implementations fall back to C library implementations ofatoi
,atoil
, andatoll
, which either implement it directly (as inMUSL libc) or delegate tostrtol/strtoll (as inGNU libc).
#include <cstdlib>#include <iostream> int main(){constauto data={"42","0x2A",// treated as "0" and junk "x2A", not as hexadecimal"3.14159","31337 with words","words and 2","-012345","10000000000"// note: out of int32_t range}; for(constchar* s: data){constint i{std::atoi(s)};std::cout<<"std::atoi('"<< s<<"') is "<< i<<'\n';if(constlonglong ll{std::atoll(s)}; i!= ll)std::cout<<"std::atoll('"<< s<<"') is "<< ll<<'\n';}}
Possible output:
std::atoi('42') is 42std::atoi('0x2A') is 0std::atoi('3.14159') is 3std::atoi('31337 with words') is 31337std::atoi('words and 2') is 0std::atoi('-012345') is -12345std::atoi('10000000000') is 1410065408std::atoll('10000000000') is 10000000000
(C++11)(C++11)(C++11) | converts a string to a signed integer (function)[edit] |
(C++11)(C++11) | converts a string to an unsigned integer (function)[edit] |
(C++11) | converts a byte string to an integer value (function)[edit] |
(C++11) | converts a byte string to an unsigned integer value (function)[edit] |
(C++11)(C++11) | converts a byte string tostd::intmax_t orstd::uintmax_t (function)[edit] |
(C++17) | converts a character sequence to an integer or floating-point value (function)[edit] |
C documentation foratoi,atol,atoll |