文档链接:atoi - C++ Reference (cplusplus.com)
如果可以看的懂英文的可以直接看这个图,看不明白也没关系,可以看一下下面的翻译:
这是一些c语言的相关单词意思:
C-string——使用空字符 0 结尾的一维字符数组
as in isspace——如果 c 是一个空白字符,则该函数返回非零值(true),否则返回 0(false)。
non-whitespace character——不为空字符;
base-10 digits——十进制数字,即0、1、2、3、4、5、6、7、8、9这10个数字
翻译:
①解析C字符串str,将其内容解释为整数,并将其作为int类型的值返回。
②该函数首先丢弃尽可能多的空白字符(如isspace函数中所述),直到找到第一个非空白字符为止。然后,从该字符开始,接受一个可选的初始加号或减号,然后跟随尽可能多的十进制数字,并将它们解释为一个数值。
③字符串可以包含形成整数的字符之后的其他字符,这些字符将被忽略,并不会影响此函数的行为。
④如果字符串str中第一个非空白字符序列不是有效的整数,或者如果不存在这样的序列,因为str为空或只包含空白字符,则不执行转换,并返回零。
简单的来讲就是该函数可以将字符串里面的数字字符转化为整形
打印举例:
反而2 3 4都在说一下特殊案例,
特殊案例就会以举例展示:
特例 1:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi(" -123");
printf("%d ", ret);
return 0;
}
特例 2:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi(" 123");
printf("%d ", ret);
return 0;
}
特例 3:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi(" 123asd");
printf("%d ", ret);
return 0;
}
特例 4:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi("");//空
printf("%d ", ret);
return 0;
}
特例 5:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi("NULL");
printf("%d ", ret);
return 0;
}
特例 6:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi("11111111111111111111111111111111");//33个1,超过了整形int的范围
printf("%d ", ret);
return 0;
}
特例 7:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret = atoi("-11111111111111111111111111111111");//33个1,超过了整形int的范围
printf("%d ", ret);
return 0;
}
那么对应打印信息为:
1:
2:
3:
4:
5:
6:但是在加1还是这个数,因为已经超过了整形范围
7:同6,
了解完后我们就知道了atoi的作用了,为了加深理解在举一个例子:
因为第一个为,不是有效的整形字符,所以为0;//也就可以说是非法。
atoi的实现
int atoi_my(const char *str)
{
int s=0;
bool falg=false;
while(*str==' ')
{
str++;
}
if(*str=='-'||*str=='+')
{
if(*str=='-')
falg=true;
str++;
}
while(*str>='0'&&*str<='9')
{
s=s*10+*str-'0';
str++;
if(s<0)
{
s=2147483647;
break;
}
}
return s*(falg?-1:1);
}