String to Integer (atoi)--LeetCode

来源:互联网 发布:mac 桌面下方出现白条 编辑:程序博客网 时间:2024/06/11 14:00

这种题的考察重点并不在于问题本身,而是要注意corner case的处理,整数一般有两点,一个是正负符号问题,另一个是整数越界问题。思路比较简单,就是先去掉多余的空格字符,然后读符号(注意正负号都有可能,也有可能没有符号),接下来按顺序读数字,结束条件有三种情况:(1)异常字符出现(按照C语言的标准是把异常字符起的后面全部截去,保留前面的部分作为结果);(2)数字越界(返回最接近的整数);(3)字符串结束。

思路:从头开始查找字符,找打标志位,然后开始计算

#include <iostream>#include <vector>#include <string>#include <limits> using namespace std;/*这里需要注意三点 一个越界 一个正负数 一个字符串结束 */int StringToInt(string& str){if(str.length()==0)return 0;int i;int flag=1;int result=0;int digit;for(i=0;i<str.length();i++)if(str[i] != ' ')break;if(str[i]=='+')i++;if(str[i]=='-'){flag = 0;i++;}for(;i<str.length();i++){if(str[i]<'0' || str[i]>'9')break;digit = str[i]-'0';if(flag && (numeric_limits<int>::max()-result*10) <= digit)return numeric_limits<int>::max();else if(!flag && (numeric_limits<int>::min()+result*10) >= digit*-1)return numeric_limits<int>::min();result = result*10 + digit;}return flag == 1? result:-result;}int main(){string str("2147483649");cout<<StringToInt(str)<<endl;return 0;}


1 0
原创粉丝点击