【面试题049】把字符串转换成整数
【面试题049】把字符串转换成整数
题目:
用C++定义一个不可以被继承的类。
思路一:
正整数的最大值是0x7FFF FFFF,最小的负整数是0x8000 0000,
因此我们需要分两种情况来分别判断整数是否发生上溢出和下溢出。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
#include <iostream>
using namespace std; enum Status {kValid = 0, kInvalid}; int g_nStatus = kValid; long long StrToIntCore(const char *digit, bool minus) { long long num = 0; while (*digit != '\0') { if (*digit >= '0' && *digit <= '9') { int flag = minus ? -1 : 1; num = num * 10 + flag * (*digit - '0'); if ( (!minus && num > 0x7FFFFFFF) || (minus && num < (signed int)0x80000000) ) { num = 0; break; } digit++; } else { num = 0; break; } } if (*digit == '\0') { g_nStatus = kValid; } return num; } int StrToInt(const char *str) { g_nStatus = kInvalid; long long num = 0; if (str != NULL && *str != '\0') { bool minus = false; if (*str == '+') { str++; } else if(*str == '-') { str++; minus = true; } if (*str != '\0') { num = StrToIntCore(str, minus); } } return (int)num; } int main() { char *str = "-123456"; char *str1 = "123456"; cout << StrToInt(str) << endl; cout << StrToInt(str1) << endl; return 0; } |