1. 程式人生 > 其它 >Android_解析JSON物件/陣列

Android_解析JSON物件/陣列

請你來實現一個 myAtoi(string s) 函式,使其能將字串轉換成一個 32 位有符號整數(類似 C/C++ 中的 atoi 函式)。

函式 myAtoi(string s) 的演算法如下:

    讀入字串並丟棄無用的前導空格
    檢查下一個字元(假設還未到字元末尾)為正還是負號,讀取該字元(如果有)。 確定最終結果是負數還是正數。 如果兩者都不存在,則假定結果為正。
    讀入下一個字元,直到到達下一個非數字字元或到達輸入的結尾。字串的其餘部分將被忽略。
    將前面步驟讀入的這些數字轉換為整數(即,"123" -> 123, "0032" -> 32)。如果沒有讀入數字,則整數為 0 。必要時更改符號(從步驟 2 開始)。
    如果整數數超過 32 位有符號整數範圍 [−231,  231 − 1] ,需要截斷這個整數,使其保持在這個範圍內。具體來說,小於 −231 的整數應該被固定為 −231 ,大於 231 − 1 的整數應該被固定為 231 − 1 。
    返回整數作為最終結果。

注意:

    本題中的空白字元只包括空格字元 ' ' 。
    除前導空格或數字後的其餘字串外,請勿忽略 任何其他字元。


不在int範圍內的就return intMin或intMax

其他的就是有幾種情形需要注意

" sdf dsf 412"

"+-431"

"+ - 34"

"+ 2342"

class Solution {
public:
    int myAtoi(string s) {
        long long mx = 2147483648;
        long long sum = 0;
        int len = s.length();
        int flag1 = 0, flag2 = 0, flag3 = 0;
        for(int i = 0; i < len; i++)
        {
            
if(flag2 == 0 && s[i] == '-') flag1 = 1; if(flag2 == 1 && !(s[i] >= '0' && s[i] <= '9')) break; if(flag3 == 1 && !(s[i] >= '0' && s[i] <= '9')) break; if(flag2 == 0 && !(s[i] >= '
0' && s[i] <= '9') && s[i] != ' ' && s[i] != '-' && s[i] != '+') break; if(flag3 == 0 && (s[i] == '-' || s[i] == '+')) flag3 = 1; if(s[i] >= '0' && s[i] <= '9') { flag2 = 1; sum *= 10; sum += s[i] - '0'; if(flag1 == 0 && sum > mx - 1) return mx - 1; if(flag1 == 1 && sum > mx) return -mx; } } int ret = flag1 == 1 ? -sum : sum; return ret; } };