把字符串转换成整数

题目描述:

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为0或者字符串不是一个合法的数值则返回0。

输入描述:

输入一个字符串,包括数字字母符号,可以为空。

输出描述:

如果是合法的数值表达式返回数字,否则返回0。

示例:

输入
+2147483647
1a33
输出:
2147483647
0

题目分析:

对于一个字符串来说,正负符号往往是在第一位的,如果第一位是数字的话,则表示符号为正。数字0的ascii码值为48,如果字符串的某一个字符减去48如果是在0到9之间则表示该字符可转换为数字,否则就是不合法的数值,直接返回0。对于字符串前几位都为0的情况下,如果sum为0,表示这个0之前还都是0,因此往后再继续循环即可。由于数据是从高位处理的,因此数据每循环一次都是上回值*10再加上本次处理的数据,本题只需缕清逻辑,很快就可以做出来。代码如下:

代码:

 1 int StrToInt(string str) {
 2         int sum = 0;
 3     int flag = -1; //是正数或者负数
 4     if (str[0] == '+' || (str[0] - 48 >= 0 && str[0] - 48 <= 9))
 5     {
 6         flag = 1; //正数
 7         if (str[0] - 48 >= 0 && str[0] - 48 <= 9)
 8             sum = str[0] - 48;
 9     }
10     else if (str[0] == '-')
11     {
12         flag = -1;
13     }
14     else
15     {
16         return 0;
17     }
18 
19     for (size_t i = 1; i < str.size(); i++) {
20         if (str[i] - 48 < 0 || str[i] - 48 > 9)
21             return 0;
22 
23         if (str[i] == 0 && sum == 0)
24             continue;
25 
26         sum = sum * 10 + (str[i] - 48);
27     }
28     sum = sum*flag;
29     return sum;
30     }

 

posted @ 2020-08-03 11:04  请叫我小小兽  阅读(341)  评论(0编辑  收藏  举报