一,题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回字符串转成整数0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
二,程序分析
1.首先遇到这个题,我们首先能想到的使用atoi进行转化,到那时这个题目不让使用,所以,就是让我们来实现这个功能。
2.我们可以开始判断这个字符串有三给方面,空字符串,,负字符串,正字符串,前面空字符串好写,直接返回就好,负字符串,首先,要变成正的字符串,然后再和正字符串一起进行计算。
3.在计算的时候,我们首先,判断字符串的长度,然后再看每一个字符的数字,然后进行计算相加减,最后进行和。【但是记住开始我们将负数变化而,那么我们在最后还是要变回来呢】。
解题思路非常简单,就是上次计算的结果*10,相当于10进制进位,然后加当前位的值。
例如:“123”转换的结果是
sum=0
sum*10+1->1
sum*10+2->12
sum*10+3->123
本题的关键是要处理几个关键边界条件:
1. 空字符串
2. 正负号处理
3. 数字串中存在非法字符
三,程序代码
class Solution {
public:
int StrToInt(string str) {
//判断为空
if(str.empty())
return 0;
int symbol = 1;
//为负数的时候
if(str[0] == '-')
{
symbol = -1;
str[0] = '0';
}
//为正数的时候
else if(str[0] == '+')
{
symbol = 1;
str[0] = '0';
}
int sum =0;
for(int i =0;i<str.size();i++)
{
//不是字符串的时候
if(str[i] < '0' || str[i]>'9')
{
sum = 0;
break;
}
//进行求和
sum = sum*10 + str[i]-'0';
}
//进行为负数的时候,符号边话
return symbol*sum;
}
};
四,程序运行结果
感觉还不错的话 ,关注一下再走啊!!!