String to Integer (atoi)--LeetCode

String to Integer (atoi)

(原題鏈接:點擊打開鏈接

Implement atoi to convert a string to an integer.

Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front. 

Requirements for atoi:

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

Solution:

找到第一個非空白字符並且判斷是否爲有效的整數字符(‘+’ ‘-’ ‘0~9’),若無效,則返回0。若第一個非空白字符爲正負號,則記錄數值的正負,然後從第二個字符開始記錄值,直至找到無效的整數字符或者到達字符串尾部,若超出INT的取值範圍,則返回INT_MAX或INT_MIN。最後若原數值爲負數,則將數值變爲負。
注意循環內的判斷溢出,防止數目太大造成result的溢出而造成答案的錯誤。
class Solution {
public:
    int myAtoi(string str) {
        long long int result = 0;
        int i = 0;
        int lessthan0 = 0;
        for(i = 0; i < str.length(); i++)
        {
            if (str[i] != ' ') break;
        }
        string substr = str.substr(i);
        if(substr.length() == 0 || (substr[0] != '-' && substr[0] != '+' && (substr[0] < '0' ||substr[0] > '9'))) return 0;
        if(substr[0] == '-')
        {
            lessthan0 = 1;
            substr = substr.substr(1);
        }
        else if(substr[0] == '+')
        {
            substr = substr.substr(1);
        }
        for(i = 0; i < substr.length(); i++)
        {
            if(substr[i] < '0' || substr[i] > '9') break;
            result = result * 10 + (substr[i] - '0');
            if(result > INT_MAX) break;
        }
        if(result > INT_MAX)
        {
            return lessthan0 ? INT_MIN : INT_MAX;
        }
        return lessthan0 ? -1 * result : result;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章