首先介绍一下atoi函数:atoi函数是将字符串转化成为数字的一个函数
比如:"hjads7809809"转化成为"7809809"
下面来看一下my_atoi函数:
代码如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <assert.h>
enum State//状态
{
VALID,//合法,字符串全是数字字符就是合法的
INVALID//非法,字符串不全是数字字符
};
//将起始状态定为不合法的
enum State state = INVALID;
int my_atoi(const char* str)
{
int flag = 1;
long long ret = 0;
//空指针
assert(str != NULL);
//空字符串
if (*str == '\0')
{
return 0;
}
//跳过空白字符
while (isspace(*str))
{
str++;
}
//所得数字的正负
if (*str == '+')
{
str++;
}
if (*str == '-')
{
flag = -1;
str++;
}
while (*str)
{
if (isdigit(*str))
{
ret = ret * 10 + flag * (*str - '0');
if (ret < INT_MIN || ret > INT_MAX)
{
return 0;
}
}
else
{
return 0;
}
str++;
}
state = VALID;
return (int)ret;
}
int main()
{
char str[] = " -1781hjk";
int ret = my_atoi(str);
if (state == VALID)
{
//合法才进行输出
printf("%d\n", ret);
}
return 0;
}
我自己是实现的时候加了一个状态变量,state如果该字符串是合法的,那么就进行输出,否则就不输出。
合法样例:"-3712987"
就是字符串只包含正负号和数字字符那么该字符串就是一个合法的,否则为不合法的