练习地址:力扣
atoi() 主要要求满足的有以下几点:
1.在字符串最前方的空格需要忽略掉
2.检查忽略掉空格之后遇到的第一个符号,如果是负号则是负数,什么符号都没有就认为是正数,接下来读入直到遇到一个非数字字符
3.返回数字
思路:首先用min 和 max 存放 int 所可以表示的最大值,由于结果可能超过 int 所能表示的最大数值,所以这三个参数全都使用long long int 定义.接下来按照题目要求设置字符串要求即可
c++实现:
class Solution {
public:
int myAtoi(string s) {
int flag = 0,flags=0,zeroflag=0; int num[210]; int k = -1, len = 0;// flag记录最终结果是正数还是负数,flags记录符号有没有修改过
memset(num, -1, sizeof(num));
long long int result = 0;
long long int min = -pow(2, 31);
long long int max =(-min- 1);
for (int i = 0; i<s.length(); i++)
{
if (len == 0 && s[i] == '-'&&flags==0&&zeroflag==0) {flag=1;flags=1;} //
else if (s[i] == ' '&&len == 0&&flags==0&&zeroflag==0) continue;
else if (s[i] == '0'&&len == 0) {zeroflag=1;continue;}
else if(s[i]=='+'&&len==0&&flags==0) {flag=0;flags=1;}
else if (s[i] >= 48 && s[i] <= 57) { num[++k] = s[i]-48; len++; }
else break;
if(len>10&&flag==1) return min;
else if(len>10&&flag==0) return max;
else continue;
}
if (len == 0) return 0;
else
{
for (int i = 0; i<len; i++)
{
result = result * 10 + num[i];
}
if (flag == 1 && (-result)>= min)
return (-result);
else if(flag == 1 && (-result) <min) return min;
else if (flag == 0 && result <= max)
return result;
else return max;
}
}
};