首页 > 代码库 > LeetCode String to Integer (atoi)
LeetCode String to Integer (atoi)
class Solution {public: int atoi(const char *str) { if (str == NULL) return 0; long val =0, pos = 0; char ch = ‘\0‘; int stage = 0; // 0-initial, 1-sign-collected, 2-digit-collected, 3-end bool positive = true; int pos_threshold = INT_MAX / 10; int neg_threshold = INT_MIN / 10; while(stage < 3 && (ch = str[pos]) != ‘\0‘) { switch(stage) { case 0: // initial stage if (ch == ‘-‘ || ch == ‘+‘) { // sign detected positive = ch == ‘+‘; stage = 1; pos++; } else if (ch >= ‘0‘ && ch <= ‘9‘) { // digit detected stage = 2; } else if (ch == ‘ ‘ || ch == ‘\t‘ || ch == ‘\n‘) { // leading white space pos++; } else { // other chars, invalid str to convert stage = 3; } ;break; case 1: // sign-collected stage if (ch >= ‘0‘ && ch <= ‘9‘) { // digit after sign stage = 2; } else { // other chars, invalid str to convert stage = 3; } ;break; case 2: // number detected stage if (ch >= ‘0‘ && ch <= ‘9‘) { // digits int pre_val = val; if (positive) { val = val * 10 + (ch - ‘0‘); if (pre_val > pos_threshold || val < pre_val) { stage = 3; val = INT_MAX; } } else { val = val * 10 - (ch - ‘0‘); if (pre_val < neg_threshold || val > pre_val) { stage = 3; val = INT_MIN; } } pos++; } else { // other chars, invalid stage = 3; } ;break; } } return val; }};
没有使用大范围的数据类型,溢出需要考虑好,是个小状态机
LeetCode String to Integer (atoi)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。