題目要求:
請你來實現乙個 atoi 函式,使其能將字串轉換成整數。
首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。接下來的轉化規則如下:
如果第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字字元組合起來,形成乙個有符號整數。
假如第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成乙個整數。
該字串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函式不應該造成影響。
注意:假如該字串中的第乙個非空格字元不是乙個有效整數字元、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。
在任何情況下,若函式不能進行有效的轉換時,請返回 0 。
心得:一開始做題時,比較沒有頭緒。首先應該先讀清題意。在第乙個非空格字元出現時就應該進行判斷。
讀取到空格-> 繼續讀取下乙個
讀取到+/- -> 繼續讀取下乙個。下乙個還應該是數字
讀取到數字 ->開始記錄,準備下乙個讀取
第乙個字元不合以上 ->輸出結束
自己寫的**:
int myatoi(char *str)
else return 0;
}//for
if(flagtest==1) res=-res;
if(res>max) return max;
else if(res這段**中,max和min用來標記int的最大值和最小值,用於後續的判斷。輸入字串後進行判斷,如果為空格就繼續下乙個,如果為+、-或者數字,並且flag為0(即表示還未開始識別數字,因為字串裡面可能有多個分隔開的數字組。這段**能正確識別只有數字、只有字母、空格開頭的數字等情況,但數字混合字母識別錯誤,此外還有其他沒能立刻考慮到的情況。
將**轉化為dfa,如下圖:
其官方c++實現如下:
class automaton },
},},}};
int get_col(char c)
public:
int sign = 1;
long long ans = 0;
void get(char c)
else if (state == "signed")
sign = c == '+' ? 1 : -1;
}};class solution
};
在官方題解中,先用乙個unordered map,例項化乙個二維向量,用於儲存狀態轉移表。而get_col函式用於判斷下乙個字元的型別。
錄入字元時,get函式判斷state和get_col對應的table的值,計算並將結果存入ans,後面含三目運算子的語句用於判斷結果是否超出int。sign用於判斷正負。
leetcode 8 字串轉為整數。
實現atoi,將字串轉為整數。在找到第乙個非空字元之前,需要移除掉字串中的空格字元。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形成整數的字元後面包...
LeetCode 8 字串轉整數
題目描述 實現atoi,將字串轉為整數。該函式首先根據需要丟棄任意多的空格字元,直到找到第乙個非空格字元為止。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串...
leetcode8 字串轉整數
實現 atoi,將字串轉為整數。該函式首先根據需要丟棄任意多的空格字元,直到找到第乙個非空格字元為止。如果第乙個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第乙個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。字串可以在形...