First:按照题目要求将一个字符串转换成一个整数,首先忽略掉前面的“+”“-”后,主要的逻辑就是将字符串
中的元素一个一个拿出来转换成整数然后循环乘10后进行累加就可以拿到转换之后的整数。
而一个字符a转换成整数只要他满足 ‘0’ <= a <= ‘9’ 这个条件即可通过 ‘a’ - ‘0’ 的方式进行转换(ASCII码的差值)
Second: 至于符号问题,我们只需要定义一个变量 flag =1,然后加上一个判断就好了:如果当前拿出来的是“+”,那么最后的返回值就是转换后的整数乘 flag = 1;如果拿出来的是“-”,那么将 flag = -1,那么最后的返回值就是转换之后的整数乘 flag = -1;如果取出来的字符不满足上面的两个条件,那么按照题目要求直接返回 0 就可以了。
Last:在加上一个判断,判断最后的返回值 ret 是否在 int 的表示范围之内,如果在那么直接返回就好,否则
就按要求返回 0 。
源码
class Solution
{
public:
long long StrToInt(string str)
{
if (str.empty())
return 0;//当 str 为空时直接返回 0
string::iterator sit = str.begin();
long long ret = 0;
int flag = 1;
while (sit != str.end())
{
ret *= 10;
if (*sit >= '0' && *sit <= '9')
{
ret += *sit - '0';
}
else if (*sit == '-' || *sit == '+')
{
if(*sit == '-')
flag = -1;
}
else
{
return 0;
}
sit++;
}
ret = ret * flag;
cout << INT_MAX << " " << INT_MIN << endl;
if(ret > INT_MAX || ret < INT_MIN)//判断 ret 是否在 int 表示的范围之内
{
return 0;
}
return ret;
}
};