字符串转换成整形数
//int atoi(const char* nptr)
//函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。
// 如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 。
// 特别注意,该函数要求被转换的字符串是按十进制数理解的。
//atoi输入的字符串对应数字存在大小限制(与int类型大小有关),若其过大可能报错 - 1。
#include<stdio.h>
#include<assert.h>
#include<ctype.h>
#include<limits.h>
int stage = 0;
int my_atoi(const char* str)
{
int flag = 1;
long long ret = 0;
assert(str);//str不是空指针
if (*str == '\0')
return 0;//str的内容是空字符串
while (isspace(*str))
str++;//跳过了空白字符
if (*str == '-')//识别正负数
{
flag = -1;
str++;
}
if (*str == '+')
str++;
while (*str)
{
if (isdigit(*str))//判断是不是数字字符
{
stage = 1;
ret = ret * 10 + (*str - '0') * flag;
if (ret > INT_MAX || ret < INT_MIN)
return 0;
str++;
}
else
{
stage = 0;
return 0;
}
}
return (int)ret;
}
int main()
{
char* str = "2@";
int ret = my_atoi(str);
if (stage == 0)
printf("异常输入%d",ret);
else
printf("转化结果是%d", ret);
return 0;
}