【题目】
把字符串转换成整数,需要考虑字符串有效性。
【代码】
C++ Code
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 |
bool bValid = true; int str2int_core(const char *digit, bool minus) { long long sum = 0; int flag = minus ? -1 : 1; while(*digit != ' ') { if (*digit >= '0' && *digit <= '9') { sum = 10 * sum + flag * (*digit - '0'); // whether overflow ? if ((!minus && sum > (signed int)0x7fffffff) || (minus && sum < (signed int)0x80000000)) { sum = 0; break; } digit ++; } else { sum = 0; break; } } if (*digit == ' ') { bValid = true; } return (int)sum; } int str2int(const char *str) { bValid = false; long long sum = 0; if (NULL == str || *str == ' ') return (int)sum; bool minus = false; if (*str == '+') { str++; } else if (*str == '-') { str++; minus = true; } if (*str == ' ') return (int)sum; return str2int_core(str, minus); } void test_case(const char *str) { int sum = str2int(str); if (bValid) cout << sum << endl; else cout << "Invalid input!" << endl; } |
【参考】
http://zhedahht.blog.163.com/blog/static/25411174200731139971/