一、函数atio的介绍
字符串str,将其内容转化为整数,并以int返回
1.该函数会先跳过空白字符(也就是空格),找到第一个非空白字符,然后从这个字符开始,取一个可用的加减号(加号等于没取,如:+123=123),后跟尽可能多的十进制数,并将其所有转化为整形。
例如:-123转化成-123
+123转化成123
2.字符串可以在构成整数的字符之后包含其他字符,这些字符将被忽略,并且对该函数的行为没有影响。
例如:123hhh,返回123,而后面的hhh将被忽视.
12h3hh,只返回12,因为后面有h不属于整数,所有会被忽视,而该h之后的其他数字也会被忽视.
3.如果第一个非空白字符串序列不是有效的整数(包括加/减号),或者字符串为空或者只包含空白字符,则不转化,直接返回0。
4.如果转化之后的整形超出int范围,则会导致未定义行为。
二,函数atio的使用
int main()
{
char str[] = " -1234";
int ret = atoi(str);
printf("%d\n", ret);
}
三、atio的模拟实现
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <ctype.h>
int my_atoi(const char* str)
{
assert(str);
if (*str == '\0')
return 0;
//处理空白字符
while (isspace(*str))//如果前面是空格,则找下一个字符,直到该字符不是空格为主
{
str++;
}
int flag = 1;
if (*str == '+')
{
str++;
flag = 1;
}
else if (*str == '-')
{
str++;
flag = -1;
}
long long ret = 0;
//处理数据->如:-123
while (isdigit(*str))
{
ret = ret * 10 + flag * (*str - '0');
if (ret<INT_MIN || ret>INT_MAX)//判断该整数是否出界
{
return 0;
}
str++;
}
return (int)ret;
}
int main()
{
char str[] = " -1234";
int ret = my_atoi(str);
printf("%d\n", ret);
}