剑指Offer-49.把字符串转换成整数(C++/Java)
题目:
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
分析:
注意输入数据的合法性,例如“1234+12”,“12@@#*24”,这样的都是不合法数值,要返回0的。但是如果第一个字符时+或-时是可以的,且影响最后输出的符号,最后还要判断下数字是否超出了范围。
程序:
C++
class Solution { public: int StrToInt(string str) { if(str.size() == 0) return 0; long long num = 0; bool tag = true; if(str[0] == '-') tag = false; for(int i = (str[0] == '+' || str[0] == '-' ? 1 : 0); i < str.size(); ++i){ if(str[i] >= '0' && str[i] <= '9'){ num = num * 10 + (str[i] - '0'); } else{ num = 0; break; } } num = tag ? num : (-num); if(num > INT_MAX || num < INT_MIN) return 0; return (int)num; } };
Java
public class Solution { public int StrToInt(String str) { if(str == null || str.length() == 0) return 0; long num = 0; boolean tag = true; if(str.charAt(0) == '-') tag = false; for(int i = (str.charAt(0) == '+' || str.charAt(0) == '-' ? 1 : 0); i < str.length(); ++i){ if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){ num = num * 10 + (str.charAt(i) - '0'); } else{ num = 0; break; } } num = tag ? num : (-num); if(num > Integer.MAX_VALUE || num < Integer.MIN_VALUE) return 0; return (int)num; } }