这一题核心解法很容易,只要读出每个字符,减去'0',得出真实int值,再进行累加res = res*10+strnum就可以了
这题主要是细枝末节要考虑很多
1.去除字符串 前面的空白符
2.如果有+-号,只能有一个,如果两个都有,认为无效,返回 0
3.如果字符串所代表的值,超出int 32位的表示界限,返回各自的极值,达到max,返回int32_max,达到min,返回int32_min
解题方法:
空白符号,用str.erase(0, str.find_first_not_of(" "));这个函数解决
+-号,trim后,首先判断符号,定义一个int flag,表示正负
之后判断字符串是否包含数字,如果有,通过自增的形式 得到长度len ,
一旦读取到非数组字符,立即break,
(同时判断是否有+-号,如果还有,直接返回 0)用
str = str.substr(0,len)获取字符数字子串
之后进行解析计算。
代码:
string trim(string str) {
str.erase(0, str.find_first_not_of(" "));
return str;
}
int myAtoi(string str) {
int len = 0;
int res = 0;
int flag = 1;
str = trim(str);
if (str[0] == '+') str = str.substr(1);
else if (str[0] == '-') {
str = str.substr(1);
flag = -1;
}
for (auto strnum : str) {
if (strnum == '+' || strnum == '-') return 0;
if (strnum >'0' && strnum <'9') {
len++;
}
else
{
str = str.substr(0,len);
break;
}
}
if (str == "") return 0;
for (auto strnum : str) {
int temp = res * 10 + (strnum - '0');
if ((temp-(strnum - '0'))/10!=res||temp<0) {
if (flag == 1) return INT32_MAX;
else return INT32_MIN;
}
else
{
res = temp;
}
}
return res*flag;
}