c++ 实现atoi()函数

来源:互联网 发布:淘宝上搜索什么有福利 编辑:程序博客网 时间:2024/06/02 19:37

1. 问题描述

  实现c++函数库中atoi()函数,要考虑到各种特殊情况:
  

  • 空字符串。
  • +和-号。
  • 字符串前中后n个空格。
  • 溢出。
  • 非数字字符。

2. 解决方案

  转换过程并不复杂,复杂的是要考虑到众多特殊情况。

int myAtoi(string str) {        if(str.length() == 0) return 0; //空串        bool isNeg = false;        long re = 0;        int i=0,cnt;        for(;i<str.length(); i++) if(str[i] != ' ') break; //跳过字符串前所有的空格        if(str[i] == '-')  //判断正负            isNeg = true;        else if (str[i] == '+') isNeg = false;        else if(str[i] >= '0' && str[i] <= '9')            re = str[i] - '0',cnt=1;  //记录数字的位数        else return 0;        i++;           for(; i < str.length(); i++)        {            if (cnt > 10) break; //大于整数所表示的最大位数,跳出循环            if(str[i] < '0' || str[i] > '9')  break;              re = re*10 + (str[i] - '0'),cnt++;        }        //溢出判断        if(re > INT_MAX && !isNeg) return INT_MAX;         else if(isNeg &&re*(-1) < INT_MIN) return INT_MIN;        return isNeg?re*(-1):re;    }
0 0
原创粉丝点击