实现atoi函数

Posted ythunder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现atoi函数相关的知识,希望对你有一定的参考价值。

面试被要求实现这个函数。

函数功能:将字符串转换为整数。那么实现这个一半需要考虑到哪些情况呢?
  • 符号:整数可以为负数。
  • 考虑上溢和下溢
  • 字符中的非法字符如何处理

我们知道int类型计算机存储中占32bit, 首位存储符号,表示的数范围为-2147483648 - 2147483647

#define MAX_INT ((1 << 31) - 1)
#define MIN_INT (-(1 << 31))

using namespace std;

int MyAtoi(char *str)

    char *temp = str;
    int i = 0;
    int flag = 0;
    unsigned int sum = 0;

    while( ' ' ==  *temp ) ++temp;   //排除开头的空格
    if( *temp != '-' && *temp != '+' && (*temp < '0' || *temp >= '9') )   //第一个字符不是数字或者+-号
        return -1;
                

    if( *temp == '-' )        //第一个是负号
        flag = 1;
        ++temp;
    
    else if( *temp == '+' ) 
        ++temp;
    

    while( *temp >= '0' && *temp <= '9' ) 
        if( !flag )     //上溢
            if(sum > MAX_INT/10 || (sum == MAX_INT/10 && (*temp > '7'))) 
                return MAX_INT;
            
         
        else     //下溢
            if(sum > MAX_INT/10 || (sum == MAX_INT/10 && (*temp > '8')))
              
                  return MIN_INT;
              
        
        sum = sum * 10 + (*temp - '0');
        ++temp;
    
    return flag ? (-1*sum):sum;

以上是关于实现atoi函数的主要内容,如果未能解决你的问题,请参考以下文章

8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

8. 字符串转换整数 (atoi)

LC 字符串转换整数 (atoi)