要求,字符串转数字
处理过程:
读取字符串,从头开始,遇到的第一个非空格字符是否为
+/- 或者数字,如果不是,那么返回0
如果是符号,则后面有尽可能多的数字,直到读取到非数字。
如果最后的数字溢出,则返回最大值
特殊情况:空字符串。返回0
int myAtoi(string str) { int integer = 0; int sign = 0; int length = str.length(); int i = 0;
if(0 == length) return 0; //first non-whitespace char for(; i < length; i++){ if(' ' != str[i]) break; } // all chars are whitespace if(i == length) return 0; auto c = str[i];
//first char is sign if( '+' == c){ sign = 1; i++; }else if('-' == c){ sign = -1; i++; }else if( c<'0' || c > '9'){ return 0; }
//all digit for(; i < length; i++){ if( str[i]<'0' || str[i] > '9') break; int num = str[i] - '0'; if(sign != -1 && (integer > INT_MAX/10|| (INT_MAX/10 == integer && 7 < num))) return INT_MAX; if(sign == -1 && integer < INT_MIN/10 || (INT_MIN/10 == integer && 8 < num)) return INT_MIN; integer = (sign != -1) ? integer * 10 + num : integer * 10 - num; } return integer;
}
|
总结:这一题和上一题差不多,写这一题的时候考虑溢出也是用上道题的方法。
看是否x10直接溢出,或者加法之后溢出.
char直接转化int是ascii值,所以减去'0'才是数字的值