思路
看到这个题目我们首先应该想到的就是去处理第一个字符,但是第一个字符也可能是数字字符,所以我们需要对他单独处理,如果他不符合条件,直接return,符合条件,我们就继续往下处理;接着就需要判断是否有‘+’或者‘-’字符,这会影响正负以及数字的长度,我们用flag标记正负,用length计算数字长度,有符号就--,最终我们可以得出数字长度,接着去遍历,然后每个字符减48后,乘以10的length-1次方,全部相加用一个变量存储起来,返回时乘flag。
画图剖析
代码
class Solution
{
public:
int StrToInt(string str)
{
int size,length,flag;
flag = 1;
size = length = str.length();
if(str[0] == '+' || str[0] == '-' || (str[0]<='9' && str[0] >= '0'))
{
if(str[0] == '+' || str[0] == '-' )
{
if(str[0] == '-')
flag = -1;
length--;
}
}
else
{
return 0;
}
int i = 0;
while(i < size)
{
if(!(str[i] == '+' || str[i] == '-' || (str[i]<='9' && str[i] >= '0')))
return 0;
i++;
}
int total = 0;
while(length)
{
total += (str[size - length]-48) * pow(10,length-1);
length--;
}
return total * flag;
}
};