std::atoi,std::atol,std::atoll

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

++str;

bool negative = false;

if (*str == '+')

++str;

else if (*str == '-')

{

++str;

negative = true;

}

T result = 0;

for (; std::isdigit(static_cast(*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(const char* str)

{

return atoi_impl(str);

}

long atol(const char* str)

{

return atoi_impl(str);

}

long long atoll(const char* str)

{

return atoi_impl(str);

}

实际的 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

Copyright © 2022 历届世界杯_世界杯篮球 - cnfznx.com All Rights Reserved.