题目描述 请你写一个函数StrToInt,实现把字符串转换成整数这个功能。 当然,不能使用atoi或者其他类似的库函数。
示例 1: 输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它是一个负号。
示例 2: 输入: "4193 with words" 输出: 4193 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
示例 3: 输入: "words and 987" 输出: 0 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。因此无法执行有效的转换。
示例 5: 输入: "-91283472332" 输出: -2147483648 解释: 数字 "-91283472332" 超过 32 位有符号整数范围。 因此返回 INT_MIN (−231) 。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 注意:
忽略所有行首空格,找到第一个非空格字符,可以是 ‘+/−’ 表示是正数或者负数,紧随其后找到最长的一串连续数字,将其解析成一个整数; 整数后可能有任意非数字字符,请将其忽略; 如果整数长度为0,则返回0; 如果整数大于INT_MAX(2^31 − 1),请返回INT_MAX;如果整数小于INT_MIN(−2^31) ,请返回INT_MIN; class Solution { public: int strToInt(string str) { if(str.empty(http://www.my516.com)) return 0; int flag = 1, i = 0, n = str.size(); long long res = 0; while(i < n && str[i] == ' ') ++i; if(i >= n) return 0; if(str[i] == '-'){ flag = -1; ++i; } if(str[i] == '+'){ if(flag == -1) return 0; else ++i; } while(str[i] >= '0' && str[i] < '9'){ res = res * 10 + str[i] - '0'; ++i; if(res > INT_MAX) break; } res *= flag; if(res > INT_MAX) return INT_MAX; if(res < INT_MIN) return INT_MIN; return res; } }; 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
---------------------
|
请发表评论