atoi函数原型
int atoi (const char * str);
这个函数的作用是将str所指向的字符串进行解析得到一个整形的数据,在将其作为返回值。
#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[10] = "123";
int i = atoi(str);
printf("%d\n",i);
}
打印结果是123
这个函数讲“123”这样的字符串转化为了123.也就是将字符串中的整数提取出来了作为了整形数据进行返回。
这个函数对字符串进行读取的时候,首先会跳过前面的所以空格字符。
char str[10] = " 123";
找到第一个非空格字符后,以这个字符为起点,对后面的数据进行读取。如果后面又遇到了空格字符就停止,同时遇到斜杠0也会停止。
char str[10] = " 12 3";
这样就只会打印12,没有3了。
这个字符串中在整数字符的后面是可以包含额外的字符的
char str[10] = " 123abc";
这样的字符虽然不能转换但是不影响前面的数字进行转化,仍然会打印123.
如果这种非数字的字符串在前面就会解析失败,也就是所想要成功转化,这个字符串中的数字就必须在前面。一旦依次解析的过程中遇到非数字字符(除了第一次对空格字符的解析)就会停止。
返回值:如果解析失败,这个函数就会返回0(字符串中的数字字符是0也会返回0,并不一定失败)。反之就会返回对应的数字。
这个也是可以转化负数的。
char str[10] = "-123";
atoi函数的模拟实现
#include<stdio.h>
#include<stdlib.h>
int my_atoi(const char* s)
{
int sign = 1;//正数表示1,负数表示0
while (isspace(*s)) {//跳过开头的空格字符
s++;
}
if (*s == '-')
{
sign = 0;
s++;
}
int result = 0;
while (isdigit(*s))
{
result *= 10;
result = result + *s - '0';
s++;
}
return sign ? result : -result;
}
int main()
{
int i = my_atoi("-123");
printf("%d\n",i);
}
如果*s是一个数字字符的话,在减去'0',根据ASCII就可以得到这个数字字符的整数形式。