剑指offer49 把字符串转换成整数
这个代码会报错
class Solution { public: enum status {kvalid = 0,kinvalid}; int now_status = kvalid; int StrToInt(string str) { now_status = kinvalid; long long num = 0; int index = 0; bool minus = false; if(str.size() != 0 && str[index] != '\0'){ if(str[index] == '+'){ index++; } else if(str[index] == '-'){ minus = true; index++; } if(str[index] != '\0'){ num = StrToIntCore(str,minus,index); } } return int(num); } long long StrToIntCore(string str,bool minus,int index){ int length = str.size(); long long num = 0; int flag = minus ? -1 : 1; for(;index < length;index++){ if(str[index] >= '0' && str[index] <= '9'){ num = num*10 + flag * (str[index]-'0');if(( num < 0x80000000) || ( num > 0x7FFFFFFF)){ num = 0; break; } } else{ num = 0; break; } } if(str[index] == '\0'){ now_status = kvalid; } return num; } };
修改为:
class Solution { public: enum status {kvalid = 0,kinvalid}; int now_status = kvalid; int StrToInt(string str) { now_status = kinvalid; long long num = 0; int index = 0; bool minus = false; if(str.size() != 0 && str[index] != '\0'){ if(str[index] == '+'){ index++; } else if(str[index] == '-'){ minus = true; index++; } if(str[index] != '\0'){ num = StrToIntCore(str,minus,index); } } return int(num); } long long StrToIntCore(string str,bool minus,int index){ int length = str.size(); long long num = 0; int flag = minus ? -1 : 1; for(;index < length;index++){ if(str[index] >= '0' && str[index] <= '9'){ num = num*10 + flag * (str[index]-'0'); int xxxx= 0x80000000; if(( num < xxxx) || ( num > 0x7FFFFFFF)){ num = 0; break; } } else{ num = 0; break; } } if(str[index] == '\0'){ now_status = kvalid; } return num; } };
或者修改为
class Solution { public: enum status {kvalid = 0,kinvalid}; int now_status = kvalid; int StrToInt(string str) { now_status = kinvalid; long long num = 0; int index = 0; bool minus = false; if(str.size() != 0 && str[index] != '\0'){ if(str[index] == '+'){ index++; } else if(str[index] == '-'){ minus = true; index++; } if(str[index] != '\0'){ num = StrToIntCore(str,minus,index); } } return int(num); } long long StrToIntCore(string str,bool minus,int index){ int length = str.size(); long long num = 0; int flag = minus ? -1 : 1; for(;index < length;index++){ if(str[index] >= '0' && str[index] <= '9'){ num = num*10 + flag * (str[index]-'0'); if(( num < (signed int)0x80000000) || ( num > 0x7FFFFFFF)){ num = 0; break; } } else{ num = 0; break; } } if(str[index] == '\0'){ now_status = kvalid; } return num; } };