版权声明:欢迎交流,本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42513339/article/details/89285884
题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
思路:判断正负什么的都很简单,我这里直接用了两个标志位。
主要需要判断是否超出int的上限,所以输入先用一个long long代替。
代码如下:
class Solution {
public:
int StrToInt(string str) {
long long ans = 0;
int len = str.length();
int flag1 = 0,flag2 = 0;
for(int i = 0; i<len; i++)
{
if(i==0 && str[i] == '+')
{continue;}
else if(i==0 && str[i] == '-')
{flag2 = 1;continue;}
if(str[i]>='0' && str[i]<='9'){
if(flag1){
ans += (str[i]-48)*pow(10,(len-1-i));
//对数字是否溢出进行判断
if((ans>0x7FFFFFFF)||(ans<(signed int)0x80000000)){
return 0;
}
}
if(flag1 == 0 && str[i] != 48){
flag1 = 1;
ans += (str[i]-48)*pow(10,(len-1-i));
}
}
else
return 0;
}
if(flag2 == 1)
return -ans;
return ans;
}
};