把字符串转换成整数
题目描述:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。数值为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 }