题目链接
思路分析
将字符串转成整数,我们首先要判断一个什么样的字符串算整数
- 行首不能有空格
- 开头必须是数字, +, -,不能有其他符号
- 数字必须是连续的,在遇到数字后,再遇到不是数字的就可以停止例如 123word123
代码实现
注意代码中的注释,要注意判断边界和特殊情况
class Solution {
public:
int strToInt(string str) {
//丢弃开头空格
int start = 0;
while(start < str.size())
{
if(str[start] != ' ')
break;
++start;
}
if(str[start] >= 'a' && str[start] <= 'z')
return 0;
bool flag = true;
if(str[start] == '-')
{
start++;
flag = false;
}
if(str[start] == '+')
{
//排除掉-+1的情况
if(flag == false)
return 0;
start++;
}
cout << start << endl;
string res = "";
while(start < str.size())
{
if(str[start] >= '0' && str[start] <= '9')
res += str[start++];
else
break;
}
cout << res << endl;
long long ret = 0;
for(int i = 0; i < res.size(); ++i)
{
ret = ret*10 + res[i]- '0';
//如果是正数,那么就是吵了2^31-1
if(flag == true && ret > INT_MAX)
return INT_MAX;
//如果是负数, 范围会大一点2^31
if(flag == false && ret-1 > INT_MAX )
return INT_MIN;
}
return flag ? ret : -ret;
}
};