将一个字符串数字转换成整型数字,类似于atoi函数
例如“12345” 转换成12345
我们所所遇到的字符串可能有以下几种情况
- 空字符 “”
- 字符前含有空格 ” 12345”
- 字符包含正负号 “-12345”
- 字符中包含字母 “1234asd”
- 字符超出范围 “123455556768678”
#include <stdio.h>
#include <assert.h>
#include <limits.h>
enum State
{
VALID,
INVALID
}state;
state = INVALID;
int my_atoi(char* str)
{
assert(str);//判断str是否为空指针
long long ret = 0;
int flag = 1;
if(*str=='\0')
{
state = INVALID;
return 0;
}
while (isspace(*str)) //跳过字符前面的空格
{
str++;
}
if (*str == '+')
{
str++;
}
else if (*str == '-') //字符的正负
{
str++;
flag = -1;
}
while (*str)
{
if (isdigit(*str)) //数字后面出现字母便不再打印
{
ret = ret * 10 + flag*(*str - '0');
if (ret > INT_MAX || ret < INT_MIN)
{
state = INVALID;
return 0;
}
}
else if (isspace(*str)) //数字字符中有空格间隔出现
;
else return (int)ret;
str++;
}
return (int)ret;
}
int main()
{
char *p = "-12345";
int ret=my_atoi(p);
if (state=VALID)
printf("%d\n", ret);
return 0;
}