字符串转整形

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>

// return: 0 error
int Str2Int(const char* _pInput)
{
    if (NULL == _pInput || strlen(_pInput) > 11 || _pInput[0] == '0') // max length 11 (include '-')
    {
        return 0;
    }
    // check valid
    int i = 0;
    int bMinus = 0;
    if (*_pInput == '-')
    {
        i ++;
        bMinus = 1;
    }
    if ((strlen(_pInput) == 10 || strlen(_pInput) == 11) 
        && isdigit(_pInput[i]) && ((_pInput[i] - '0') > 3)) // max start num 3
    {
        return 0;
    }
    for (i; i < strlen(_pInput); i++)
    {
        if (!isdigit(_pInput[i]))
        {
            return 0;
        }
    }
    //calc
    unsigned int Sum = 0;
    int max = 0x7fffffff;
    int min = 0x80000000;
    //unsigned int umax = 0xffffffff;
    //printf("max = %d, min = %d, umax = %u\n", max, min, umax);
    const char* pBegin = _pInput;
    // check minus
    if (bMinus)
    {
        pBegin ++;
    }
    while (*pBegin != '\0')
    {
        Sum = Sum * 10 + *pBegin - '0';
        pBegin ++;
        //printf("Sum = %u\n", Sum);
        //check overflow
        if ((bMinus && Sum > max + 1) || (!bMinus && Sum > max))
        {
            return 0;
        }
    }
    
    int ret = (bMinus) ? -Sum : Sum;
    
    return ret;
}

int main(int argc, char** argv)
{
    char str[] = "-214748364844";
    
    int nRet = Str2Int(argv[1]);
    printf("nRet: %d\n", nRet);
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值