LeetCode String to Integer (atoi)

來源:互聯網
上載者:User

標籤:style   blog   color   io   os   使用   ar   資料   div   

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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.