自己实现atoi()函数

atoi是C++中将字符串转为整数的函数,我们可以自己尝试实现atoi()函数

要求:

  • 这个函数需要丢弃之前的空白字符,直到找到第一个非空白字符。之后从这个字符开始,选取一个可选的正号或负号后面跟随尽可能多的数字,并将其解释为数字的值。
  • 字符串可以在形成整数的字符后包括多余的字符,将这些字符忽略,这些字符对于函数的行为没有影响。
    -如果字符串中的第一个非空白的字符不是有效的整数,或者没有这样的序列存在,字符串为空或者只包含空白字符则不进行转换。
  • 如果不能执行有效的转换,则返回 0。如果正确的值超过的可表示的范围,则返回 INT_MAX(2147483647)或 INT_MIN(-2147483648)。

直接放代码(C++):

int myAtoi(string str) {
    int current_index = 0;
    int base = 1;
    // 字符串为空,返回0
    if( str.length() == 0 ){
    return 0;
    }
    // 去除前导空格
    while (str[current_index] == ' ' && current_index < str.length()) {
        current_index ++;
    }
    // 分析符号
    if( str[current_index] == '+' || str[current_index] == '-'  ){
        base = (str[current_index++] == '-')? -1:1;
    }
    int sum = 0;
    while (current_index < str.length()) {
        int current = str[current_index] - '0';
        // 异常情况跳出
        if( current < 0 || current > 9){
            break;
        }
        // 判断溢出
        if ( sum > 0 && ( sum > INT_MAX / 10  ||  ( sum ==  INT_MAX /10 && current >= INT_MAX%10 )  ) ){
            return INT_MAX;
        } else if (  sum < 0 &&  ( sum < INT_MIN / 10  ||  ( sum ==  INT_MIN /10 &&  current >= (INT_MIN%10) * -1) ) ){
            return INT_MIN;
        }
        sum = sum* 10  + current * base;
        current_index ++;
    }
    return sum;
}

Notes 注意
C++的INT_MAX是2147483647而INT_MIN是-2147483648,最后一位是不一样的,因为有0的存在,所以,需要分开处理正数和负数的问题

标签: none
返回文章列表 文章二维码
本页链接的二维码
打赏二维码