1 题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
2 思路和方法,C++核心代码
边界条件: 数据上下 溢出;空字符串;只有正负号;有无正负号 。
1 class Solution { 2 public: 3 int StrToInt(string str) { 4 if(str.empty()) 5 return 0; 6 int sign = 1; 7 int i =0; 8 int result = 0; 9 10 if (str[0] == '-'){ 11 sign = -1; 12 ++i; 13 } 14 else if(str[0] == '+') 15 ++i; 16 17 for (; i < str.size(); ++i) { 18 if(str[i]>'9' || str[i] < '0') 19 return 0; 20 int num = str[i] - '0'; 21 22 // 判断是否上溢出或者下溢出 23 if ((sign==1 && num > (numeric_limits<int>::max()-sign * num)/10) 24 || (sign==-1 && num< (numeric_limits<int>::min()-sign * num)/10)) 25 { 26 return 0; 27 } 28 result = result *10 + sign * num; 29 } 30 return result; 31 } 32 };
参考资料
https://blog.csdn.net/u012477435/article/details/83351659#_873