题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路
由于字符串可能首位带+或-,则需要先判断首位是否为+,-,数字或其他字符,若为其他字符,则return 0, 否则分为3类,并移除标志位
其次对字符串求和,需要注意的是最终返回的是int,int是有界的,为了防止溢出,我们用long long,最后判断是否超出int,若超出返回0否则返回即可
代码
class Solution {
public:
int StrToInt(string str) {
long long res = 0;
int sign = 0;
if(str[0]>'9')
return 0;
if(str[0]=='-')
{
str.erase(str.begin());
sign = 2;
}
else if(str[0]=='+')
{
str.erase(str.begin());
sign = 1;
}
if(sign == 0)
{
res = add(str);
}
else if(sign == 1)
{
res = add(str);
}
else if(sign == 2)
{
res = -add(str);
}
if(res>2147483647 || res<-2147483648)
return 0;
else
return res;
}
long long add(string str)
{
long long res = 0;
for(int i = 0; i < str.size();i++)
{
if(str[i]>'9' || str[i]<'0')
{
return 0;
}
else
{
res += (str[i] - '0') * pow(10,str.size()-i-1);
}
}
return res;
}
};