题目链接:
题目描述:
将字符串转化为int型整数。
题目分析:
题不难,细节太多。需要注意的是:
在未处理数字字符前,数字前有空格的跳过,例如s=” 123” result=123;
字符串中有‘+’,‘-’号,需要表示int型结果的正负,例如s=”-123” result=123;
字符串会有多个非数字字符导致转换int型非法,此时返回0,例如:“-+123”,result=0;
字符串处理数字字符后,如果遇到除数字字符外的字符,忽略,可以结束处理。例如:s=”-123a “,result=-123;
最后是数字越界的处理,result最好是long long型,当数字越界,数字为负时,返回INT_MIN,为正时,返回INT_MAX;
代码:
代码有点挫……
class Solution {
public:
int myAtoi(string str) {
int len=str.size();
long long result=0;
int flag=0;
bool mark=true;
bool mark1=true;
int i=0;
while (str[i] == ' '){
i++;
}
for(;i<len;i++){
if(str[i]>='0'&&str[i]<='9'){
int ans=str[i]-48;
result=result*10+ans;
if (result > INT_MAX){
mark1=false;
result = INT_MAX;
}
}
else if(str[i]=='-'){
if(flag==0){
flag=-1;
}
else{
mark=false;
break;
}
}
else if(str[i]=='+'){
if(flag==0){
flag=1;
}
else{
mark=false;
break;
}
}
else{
break;
}
}
if(!mark){
return 0;
}
else{
if(result == INT_MAX){
if (flag == -1){
if(mark1==false){
result = INT_MIN;
}
}
else{
result = INT_MAX;
}
}
if(flag == -1){
if (result > 0){
result = 0 - result;
}
}
}
return result;
}
};