将字符数字转换为数字输出(模拟atoi)

将一个字符串数字转换成整型数字,类似于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;
}

猜你喜欢

转载自blog.csdn.net/M_jianjianjiao/article/details/80659608