Leetcode: 8. String to Integer (atoi)

8. String to Integer (atoi)

题目: Leetcode:8. String to Integer (atoi)

描述:

[blockquote]

  • 内容:Implement atoi to convert a string to an integer.
  • 题意:字符串转整数,实现一个atoi函数的功能。

[/blockquote]

分析:

[blockquote]

  • NO8.String to Integer (atoi) atoi功能详述:(MSDN描述、百度百科描述) 1、跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测); 2、直到遇上数字或正负符号才开始做转换; 3、再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回; 4、如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0;
  • 思路: 1、遍历字符串依次判断字符。 2、跳过未检出数字的字符的前置空格缩进符号等; 3、检测是否存在数字正负号问题,正负号有且只能被检测到一次; 4、检测到非数字或字符串检测结束时,返回结果; 5、若字符串为空或不能转换成int时,返回0; 6、 如果正确的值超出可表示值的范围,则返回INT_MAX(2147483647)或INT_MIN(-2147483648)

[/blockquote]

代码:

int myAtoi(string str) {
        long long llValue = 0;
        bool bNeg = false;
        int nIndex = 0;
        int nLen = str.size();
        if (0 == nLen)
        {
          return 0;
        }
        while (isspace(str[nIndex]))
        {
            ++nIndex;
        }
        if (nIndex < nLen 
            && ('-' == str[nIndex] || '+' == str[nIndex]))
        {
            bNeg = '-' == str[nIndex];
            ++nIndex;
        }

        if (nIndex < nLen 
            && str[nIndex] >= '0' 
            && str[nIndex] <= '9')
        {
            llValue = str[nIndex] - '0';
            ++nIndex;
            while (nIndex < nLen 
            && str[nIndex] >= '0' 
            && str[nIndex] <= '9')
            {
                llValue = llValue * 10 + (str[nIndex] - '0');
                ++nIndex;
                if (llValue > INT_MAX)
                {
                    return bNeg ? INT_MIN : INT_MAX;
                }
            }
        return bNeg ? -llValue : llValue;
        }
    return 0;
}

备注:

[blockquote]

  • LC上面给出的要求是 The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. 尽可能多的去掉空格。 但是在MSDN上atoi上以及百度百科atoi上均给出的是 A whitespace consists of space or tab characters 包含已忽略的空格或制表符,百度百科推荐使用isspace。 关于long long来存储越界数字的问题常见Leetcode:7. Reverse Integer

[/blockquote]

相关推荐