Q:自己实现一个atoi函数
这题看似很简单,其实不然,该题有很多边界条件需要考虑,举几个例子,输入:"f123", "-f123", " -123",还有一些正溢出和负溢出的问题需要考虑在内。
考虑完了这些问题,该题就比较容易了
直接上代码:
class Solution {
public:
int atoi(const char *str) {
int res = 0;
string s ="";
int size = strlen(str);
//消除空格
while(*str){
if(*str == ' ')str++;
else break;
}
size = strlen(str);
if(size == 0)return res;
char c1 = str[0];
int flag = 0;
for(int i = 0; i < size; i++){
if(c1 == '+' && flag == 0){
flag = 2;
continue;
}
if(c1 == '-' && flag == 0){
flag = 1;
continue;
}
if(48 <= (int)str[i] && (int)str[i] <=57){
s += str[i];
}
else break;
}
int sz = s.size();
for(int i = 0; i < sz; i++){
int temp = (s[i] - '0') * pow((double)10, (double)(sz-i-1));
//防止正溢出
if( INT_MAX - temp < res && flag != 1){
return INT_MAX;
}
//防止负溢出
if( INT_MIN + temp > -res && flag == 1){
return INT_MIN;
}
res += temp;
}
if(flag == 1)return -res;
return res;
}
};