题目大意:给出一个数字表示的字符串将其转化为数字。要求算法能够忽略字符串开头的连续空格,当字符串出现其他字符时将字符串就此截断且返回结果,当数字和大于 MAX_INT时返回MAX_INT当数字和小于MIN_INT时返回MIN_INT。
算法思想:
开始时设置一个当前结果和变量,符号变量,和一个开始标记,然后遍历字符串,忽略开头的连续空格符,如果首次遇到'+','-'则标记符号变量且标记开始变量,如果遇到数字则将其加入结果和中且标记开始变量,其他情况则终止遍历,在字符串遍历的时候时刻判断结果和的上下边界。
代码如下:
class Solution {
public:
int myAtoi(string str) {
long long res=0;
if(str.length()==0) return res;
int sign=1;
bool isStart=false;
for(char c:str){
if(c==' '&&!isStart){
continue;
}
else if(isdigit(c)){
res=res*10+c-'0';
isStart=true;
}
else if(c=='+'&&!isStart)
{
isStart=true;
}
else if(c=='-'&&!isStart){
isStart=true;
sign=-1;
}
else{
break;
}
if(res>2147483647&&sign==1) { res=2147483647; break;}
if(res>2147483648&&sign==-1){ res=2147483648; break;}
}
return res*sign;
}
};