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

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<assert.h>
_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_MAX<ret || INT_MIN>ret)//如果转化的结果大于整型最大值或小于整型最新值,就不在往后继续判断,跳出循环
        {
            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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值