1. 程式人生 > >題目:字符串轉整數

題目:字符串轉整數

div 字符串轉整數 sta 字符 ptr flag 題目 存儲 返回

這個問題解答的思路跟上個翻轉整數一樣,都是通過long long類型存儲一個結果字符串,然後返回int區域內大小的數字。

這道題我出了好幾次問題,後來才發現是因為沒有仔細讀題,題目只說了去除剛開始遇到的空格而我去除全部了。

我寫出的正確的代碼如下(效率超過了100%):

static const auto io_speed_up = []()
{
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return 0;
}();

class Solution {
public:
    int myAtoi(string str) {
        size_t index    
= 0; bool flag = false; long long res = 0; while (str[index] == ) ++index; if (str[index] == -) { flag = true; ++index; } else if(str[index] == +) ++index; while (str[index] >=
0 && str[index] <= 9 && res < INT_MAX) { res = res * 10 + str[index] - 0; ++index; } if (flag) res = -res; if (res > INT_MAX) return INT_MAX; if (res < INT_MIN) return INT_MIN;
return (int)res; } };

這道題有一個有意思的地方在於,傳遞的是一個字符串,那麽最後一位即str[str.size()]位一定是一個‘\0‘字符,這個字符必然不會滿足數字字符或者空字符的條件。這意味著我們在做這道題中,只要設置好條件,就不用關心字符串長度的問題(每個循環都會少一次判斷)。

題目:字符串轉整數