leetcode-String to Integer (atoi)-8

来源:互联网 发布:android 网络框架 编辑:程序博客网 时间:2024/04/29 03:18

这题目首先你要理解atoi函数的功能,然后去自己实现。

输入一个字符串,第一个非空字符是+、- 或者数字,否则直接输出0;符号后面必须必须是连续的数字(也就是数字前面最多紧接一个符号,否则输出0),遇到非数字就停止。

除了字符的格式还有就是注意整数的范围,INT_MAX,INT_MIN。我判断的地方不是很到位,所以后来直接在前面判断读入的数字的个数,如果超过10个,直接返回最大整数或最小整数。

“++123”输出0

“+  123”输出0

“    123”输出123

“+-123-1”输出0

“b123”输出0

class Solution {public:    int myAtoi(string str) {int len=str.length();int i=0;int ans=0;int ad=0,su=0;int ok=1;int ok2=0;while(i<len){    if(!ok) break;if(str[i]=='+'){ad++;if(ad>1) return 0;ok2=1;}else if(str[i]=='-'){su++;if(su>1) return 0;ok2=1;}else if(str[i]>='0'&&str[i]<='9'){if(ad>0&&ad==su) return 0;ok=1;int cnt=0;int tmp[100];while(i<len){tmp[cnt++]=str[i++]-'0';if(i>=len||!(str[i]<='9'&&str[i]>='0')) break;}//for(int j=0;j<cnt;j++) cout<<tmp[j]<<" ";cout<<endl;    if(cnt>10){        if(ad>=su) return INT_MAX;        else return INT_MIN;    }for(int j=0;j<cnt;j++){ans=ans*10+tmp[j];if(ans<0&&ad>=su) return INT_MAX;if(ans<0&&ad<su) return INT_MIN;// if(ans>=INT_MAX){//     ans=ad<su?(ans*(-1)):INT_MAX;//     if(ad<su&&ans<INT_MIN) ans=INT_MIN;//     return ans;// }}if(ad<su) ans*=-1;break;}else if(str[i]!=' '&&!ok2) ok=0;else if(ok2) ok=0;i++;}  return ans;}};


0 0
原创粉丝点击