C++
编译器支持
自由(freestanding)与宿主(hosted)
语言
标准库
标准库头文件
具名要求
特性测试宏 (C++20)
语言支持库
概念库 (C++20)
诊断库
内存管理库
元编程库 (C++11)
通用工具库
容器库
迭代器库
范围库 (C++20)
算法库
字符串库
文本处理库
数值库
日期和时间库
输入/输出库
文件系统库 (C++17)
并发支持库 (C++11)
执行控制库 (C++26)
技术规范
符号索引
外部库
[编辑] 文本处理库
本地化库
正则表达式库 (C++11)
格式化库 (C++20)
空终止序列工具
字节字符串
多字节字符串
宽字符串
原生数值转换
to_chars(C++17)
to_chars_result(C++17)
from_chars(C++17)
from_chars_result(C++17)
chars_format(C++17)
文本编码标识
text_encoding(C++26)
[编辑] 空终止字节字符串
函数
字符分类
isalnum
isalpha
islower
isupper
isdigit
isxdigit
isblank(C++11)
iscntrl
isgraph
isspace
isprint
ispunct
字符操作
tolower
toupper
转换为数字格式
atof
atoiatolatoll(C++11)
strtolstrtoll(C++11)
strtoulstrtoull(C++11)
strtofstrtodstrtold(C++11)(C++11)
strtoimaxstrtouimax(C++11)(C++11)
字符串操作
strcpy
strncpy
strxfrm
strcat
strncat
字符串检查
strlen
strcmp
strncmp
strcoll
strchr
strrchr
strspn
strcspn
strpbrk
strstr
strtok
字符数组函数
memchr
memcmp
memset
memcpy
memmove
杂项
strerror
[编辑]
定义于头文件
int atoi( const char* str );
(1)
long atol( const char* str );
(2)
long long atoll( const char* str );
(3)
(C++11 起)
将 str 指向的字节字符串解释为整数值。隐含的基数始终是 10。
丢弃所有空白字符,直到找到第一个非空白字符,然后尽可能多地获取字符以形成有效的整数数字表示,并将其转换为整数值。有效的整数值由以下部分组成
(可选) 加号或减号数字
如果结果的值无法表示,即转换后的值超出相应返回类型的范围,则行为是未定义的。
目录
1 参数
2 返回值
3 可能的实现
4 示例
5 另请参阅
[编辑] 参数
str
-
指向要解释的空终止字节字符串的指针
[编辑] 返回值
成功时,对应于 str 内容的整数值。
如果无法执行转换,则返回 0。
[编辑] 可能的实现
template
T atoi_impl(const char* str)
{
while (std::isspace(static_cast
++str;
bool negative = false;
if (*str == '+')
++str;
else if (*str == '-')
{
++str;
negative = true;
}
T result = 0;
for (; std::isdigit(static_cast
{
int digit = *str - '0';
result *= 10;
result -= digit; // calculate in negatives to support INT_MIN, LONG_MIN,..
}
return negative ? result : -result;
}
int atoi(const char* str)
{
return atoi_impl
}
long atol(const char* str)
{
return atoi_impl
}
long long atoll(const char* str)
{
return atoi_impl
}
实际的 C++ 库实现会回退到 C 库中 atoi、atoil 和 atoll 的实现,这些实现要么直接实现(如 MUSL libc),要么委托给 strtol/strtoll(如 GNU libc)。
[编辑] 示例
运行此代码
#include
#include
int main()
{
const auto 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 (const char* s : data)
{
const int i{std::atoi(s)};
std::cout << "std::atoi('" << s << "') is " << i << '\n';
if (const long long ll{std::atoll(s)}; i != ll)
std::cout << "std::atoll('" << s << "') is " << ll << '\n';
}
}
可能的输出
std::atoi('42') is 42
std::atoi('0x2A') is 0
std::atoi('3.14159') is 3
std::atoi('31337 with words') is 31337
std::atoi('words and 2') is 0
std::atoi('-012345') is -12345
std::atoi('10000000000') is 1410065408
std::atoll('10000000000') is 10000000000
[编辑] 参阅
stoistolstoll(C++11)(C++11)(C++11)
将字符串转换为有符号整数 (function) [编辑]
stoulstoull(C++11)(C++11)
将字符串转换为无符号整数 (function) [编辑]
strtolstrtoll(C++11)
将字节字符串转换为整数值 (function) [编辑]
strtoulstrtoull(C++11)
将字节字符串转换为无符号整数值 (function) [编辑]
strtoimaxstrtoumax(C++11)(C++11)
将字节字符串转换为 std::intmax_t 或 std::uintmax_t (function) [编辑]
from_chars(C++17)
将字符序列转换为整数或浮点值 (function) [编辑]
C 文档 用于 atoi, atol, atoll