剑指offer中atoi()函数的实现

#include
#include
#include
#include
_Bool tmp_flag = 0;//判断字符串转换来的数字是否合法 0表示不合法,1表示合法
int my_atoi(const char*src)
{
    long long ret = 0;
    int flag = 1;//判断这个字符串转为的数字的正负性。1表示整数,-1表示复数
    assert(src != NULL);//断言src是否为空指针
    while (isspace(*src))//跳过前面的空格
    {
        src++;
    }
    if (*src == '-' || *src == '+')
    {
        if (*src == '-')
            flag = -1;
        src++;//判断完之后一定要向后偏移一个字节。
    }
    while ((*src) && isdigit(*src))//判断字符是不是数字字符
    {
        tmp_flag = 1;//如果是数字字符,把tmp_flag赋值为真
        if (INT_MAXret)//如果转化的结果大于整型最大值或小于整型最新值,就不在往后继续判断,跳出循环
        {
            break;
        }
        ret = ret * 10 + flag*(*src - '0');//把字符串数字转化为整型
        src++;//计算完之后,向后偏移一个字节
    }
    if (*src)//判断字符串是是否还有非数字字符
    {
        tmp_flag = 0;//如果还有非数字字符,把tem_flag赋值为假。
    }
    return (int)ret;
}
int main()
{
    printf("请输入数字字符串:");
    char pc[20] = { 0 };
    scanf("%s", pc);
    int ret = my_atoi(pc);
    printf("%d\n", atoi(pc));
    if (tmp_flag)//当字符串为合法字符串时,则输出转化后的结果。
        printf("%d\n", ret);
    system("pause");
    return 0;
}

你可能感兴趣的:(剑指offer中atoi()函数的实现)