您的位置:首页 > 编程语言 > C语言/C++

c++ 实现atoi()函数

2016-04-18 21:02 330 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: