2023-08-03力扣今日四题
链接:
剑指 Offer 67. 把字符串转换成整数
题意:
按规则将字符串转换成整数,规则不详叙
解:
字符串处理
实际代码:
#include<iostream>
#include<cstring>
#include<climits>
using namespace std;
int stringToint(string &s)
{int ans=0;for(int i=0;i<s.size();i++){if(s[i]=='+'||s[i]=='-'){ans=int(s[++i]-'0');}else ans=ans*10+int(s[i]-'0');}if(s[0]=='-') ans*=-1;return ans;
}
void solveZero(string &s)
{for(int i=0;i<s.size();i++){if(s[i]=='-'||s[i]=='+') continue;if(s[i]!='0') break;else{s.erase(i,1);i--;}}if(s.empty()) s="0";else if(s[0]=='+') s.erase(0,1);
}
void NoSpace(string &s)
{int pos1=s.find_first_not_of(" ");int pos2=s.find_last_not_of(" ");if(pos1!=-1)s=s.substr(pos1,pos2-pos1+1);
}
int strToInt(string str)
{NoSpace(str);if(str.empty()) return 0;string ans,iMin=to_string(INT_MIN), iMax=to_string(INT_MAX);int zt=0;for(int i=0;i<str.size();i++){if(zt<=1)//状态1 数字或者点 状态0 +- {if(str[i]=='+'||str[i]=='-')//只允许一个符号 {if(zt==0) zt=1;//进入状态1 else break;ans.push_back(str[i]);}else if(str[i]>='0'&&str[i]<='9'){ans.push_back(str[i]);zt=1;//进入状态1 }else break;}}//cout<<ans<<endl;solveZero(ans);cout<<ans<<endl;if(ans.size()==1&&(ans[0]=='+'||ans[0]=='-')) return 0;if(ans[0]=='-')//负{if(ans.size()>iMin.size()) return INT_MIN;else if(ans.size()==iMin.size()){if(ans<iMin) return stringToint(ans);else return INT_MIN;}else return stringToint(ans);}else{if(ans.size()>iMax.size()) return INT_MAX;else if(ans.size()==iMax.size()){if(ans<iMax) return stringToint(ans);else return INT_MAX;}else return stringToint(ans);}return 0;
}
int main()
{string s;getline(cin,s);int ans=strToInt(s);cout<<ans<<endl;return 0;
}
限制:
我不道啊