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

来源:互联网 发布:人工智能机械假肢感应 编辑:程序博客网 时间:2024/06/05 15:07
#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;}
原创粉丝点击