atoi和itoa的模拟实现

#include<stdio.h>
#include<ctype.h>
#include<iostream>
#define MAX (0x7fffffff)
#define MIN (0x8000000)
int my_atoi(const char*str)
{
    if(str==NULL)
    return 0;
    const char*p=str;
    int flag=1;
    long long res=0;
    while(isspace(*p))//判断是否为空字符
    {
        ++p;
    }
    if(*p=='-')
    {
        flag=-1;
        ++p;
    }else if(*p=='+')
    {
        ++p;
    }
    while(*p>='0'&&*p<='9')
    {
        res=res*10+*p-'0';
        if(flag==1)//判断是否超过int类型的范围
        {
            if(res>MAX)
            res=2147483647;
        }
        else if(flag==-1)
        {
            if(-res<MIN)
            res=2147483648;
        }
        ++p;
        }
        return (int)flag*res;
}

char *my_itoa(int num,char*str,int radix)
{
    char zm[] = "0123456789abcdefghijklmnopqrstuvwxyz";
    char *p = str;
    char arr[100] = {0};
    int sum = num;
    int i = 0;
    if (radix<2 && radix>36)
    {
        printf("error data");
        return str;
    }
    if (num < 0)
    {
        printf("error data");
        return str;
    }
    while (sum>0)
    {
        arr[i] = zm[sum%radix];
        i++;
        sum /= radix;
    }
    for (int j = i - 1; j >= 0; --j)
    {
        *p = arr[j];
        p++;
    }
    *p = '\0';
    return str;
}


猜你喜欢

转载自blog.csdn.net/qqkb1016/article/details/79798355