实现atoi

原创 2013年12月05日 23:33:45

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

Requirements for atoi:

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

注意点:空白、正负号、无效字符、溢出  

待完善。。。。。。

一、

int atoi(const char *str)
{
    // Start typing your C/C++ solution below
    // DO NOT write int main() function
    if(str == NULL || *str == '\0')
        return 0;
    long long res = 0;
    while(*str == ' ')
        str++;

    bool ispositive = true;
    if(*str == '-')
    {
        ispositive = false;
        str++;
    }
    else if(*str == '+')
        str++;
    while(*str && isdigit(*str))
    {
        int tmp = *str - '0';
        res = res*10 + tmp;
        str++;
    }
    if(! ispositive)
        res = -res;
    if(res > INT_MAX) 
        res=INT_MAX;
    else if(res < INT_MIN) 
        res = INT_MIN;
    return res;
}
二、
int atoi(const char *str)
{
    if(str == NULL || *str == '\0')
        return 0;
    int num = 0;
    int sign = 1;
    int i = 0;
    int n = strlen(str);
    while (str[i] == ' ')
        i++;
    if (str[i] == '+')
        i++;
    else if (str[i] == '-')
    {
        sign = -1;
        i++;
    }
    for (; i < n; i++)
    {
        if (str[i] < '0' || str[i] > '9')
            break;
        if (num > INT_MAX / 10 || (num == INT_MAX / 10 &&(str[i] - '0') > INT_MAX % 10))
        {
            return sign == -1 ? INT_MIN : INT_MAX;
        }
        num = num * 10 + str[i] - '0';
    }
    return num * sign;
}



C语言中的atoi函数的实现

C语言中有很多的库函数,其实平时没事的时候多去实现一下里面的库函数还是很有用的,下面就来讲一讲C语言中的atoi函数,这个函数的主要功能是将一个字符串转化为一个数字,可能第一眼看上去,你会觉得这是一个...
  • Loving_Forever_
  • Loving_Forever_
  • 2016年04月30日 11:00
  • 4927

一道经典面试题,atoi函数的实现

参考: (1)atoi函数的实现 (2)《剑指offer》 本体
  • duqi_2009
  • duqi_2009
  • 2014年04月13日 11:19
  • 1574

C/C++_atoi,itoa功能及其实现原理

itoa将数字转换成指定进制的字符串 itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通...
  • u010003835
  • u010003835
  • 2015年08月14日 18:34
  • 2721

atoi函数实现

  • 2013年08月24日 21:55
  • 484B
  • 下载

我实现的 atoi() strcpy()

  • 2011年08月17日 12:11
  • 523B
  • 下载

自己实现的atoi函数

  • 2012年03月27日 19:47
  • 362KB
  • 下载

枚举窗口,内存对齐,自己实现atoi

  • 2011年02月20日 13:55
  • 7KB
  • 下载

C语言itoa、atoi和strlen的实现

  • 2012年09月18日 14:07
  • 19KB
  • 下载

C语言itoa()函数和atoi()函数详解(整数转字符C实现)

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。 1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(...
  • striving1234
  • striving1234
  • 2017年06月08日 12:59
  • 162

C语言50题之模拟实现atof、atoi

atof,就是 把字符串转换成浮点数,这个函数就可以完成,他们的家族有很多:atoi,itoa,其中的意思,就不详细说了,这里举出一个即可,都是一个家族的嘛,都与规律的。 首先说一下关于字符串转换成...
  • jhcconan614
  • jhcconan614
  • 2016年12月19日 20:54
  • 291
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现atoi
举报原因:
原因补充:

(最多只允许输入30个字)