库函数atoi:
功能:将字符串中的数字转换成int数字输出
传入参数:字符数组名,即字符串首字符地址。输出:int
看注释
#include <stdio.h>
#include <assert.h>
#include <math.h>
#include <limits.h>
enum Status//利用枚举判断传入是否是'\0'
{
VALID,
INVALID
}st = VALID;//创建全局变量初始化为合法
int my_atoi(const char* str)
{
assert(str);
if (*str == '\0')
{
st = INVALID;//若传入的时'\0',st置为非法
return;
}
int i = 0;//遍历位置标记
int flag = 1;//正负标记
long long ret = 0;
while (*(str + i) < '0' || *(str + i) > '9')//当前面的字符不是数字字符时,将i标记向后+1
{
if (*(str + i) == '-')
{
flag = -1;//如果发现有-号,将flag正负标记改为-1
}
else if (*(str + i) == '+')
{
flag = 1;//为防止----+的情况出现,跳过到最后的依旧需要判断,如果flag已经改为-1.此时依旧可以改回开
}
i++;
}
while((int)*(str + i) >= '0' && (int)*(str + i) <= '9')
{
ret = ret * 10 + flag * ((int)*(str + i ) - '0');
if(ret>INT_MAX||ret <INT_MIN)//int越界判断,当超过int能存放的数据大小时,直接结束并返回0
{
return 0;
}
i++;
}
return ret;
}
int main()
{
char a[] = "-351151";
int n = my_atoi(a);
if (st == INVALID)
{
printf("非法返回\n");
return 1;
}
else if(st==VALID)
{
printf("%d\n", n);
}
return 0;
}