每日一题——atoi,itoa函数的实现

本文探讨了将字符串转换为长整型数的atoi函数及其逆过程itoa函数。重点指出在实现atoi时应注意空格、符号、结束条件、溢出问题以及异常输入的处理,通过一个全局变量valid来标记输入的有效性。

atoi是将字符串转换为长整形数的一种函数,itoa相反
atoi实现需注意一下点:
1,空格;
2,表示数值的正负号;
3,结束条件:非数字或‘\0’;
4,考虑溢出问题;
5,考虑异常输入问题(+abc …),用全局变量valid标识;

#define INT_MAX ((int)0x7FFFFFFF)
#define INT_MIN ((int)0x80000000)
bool valid = true;    //标识异常

int atoi(const char* str)
{
    if(str == NULL) return 0;

    bool minus = false;    //标识正负
    long long result = 0;

    while(*str == ' ') str++;

    if(*str == '-')
    {
        minus = true;
        str++;
    }
    else if(*str == '+')
        str++;
    if(*str < '0' || *str > '9')  return 0;
    valid = true;
    while(*str >= '0' && *str <= '9')
    {
        result = result*10 + *str-'0';
        if((minus && result > INT_MAX) || (!minus && result < INT_MIN))
        {
            valid = false;
            return 0;
        }
        str++;
    }

    if(minus)
        result*= -1;
    return (int)result;
}
char* Reverse(char* str)  
{
    char* begin = str;
    char* end = str;
    char* ret = begin;
    while (*end)
        end++;
    end--;
    while (begin < end)
    {
        char tmp = *begin;
        *begin = *end;
        *end = tmp;

        begin++;
        end--;
    }
    return ret;
}

char* my_itoa(int x)
{
    if (x == 0) return NULL;
    static char str[100];
    int isnegtive = 0;  //标注正负
    if (x < 0)
    {
        isnegtive = 1;
        x = -x;
    }

    int i = 0;
    while (x)
    {
        str[i++] = x % 10 + '0';
        x = x / 10;
    }
    if (isnegtive == 1)
        str[i++] = '-';
    str[i] = '\0';
    return Reverse(str);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值