字串轉換整數(atoi)
1.題目描述:請你來實現一個 atoi 函式,使其能將字串轉換成整數。
首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第一個非空格的字元為止。接下來的轉化規則如下:
如果第一個非空字元為正或者負號時,則將該符號與之後面儘可能多的連續數字字元組合起來,形成一個有符號整數。
假如第一個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成一個整數。
該字串在有效的整數部分之後也可能會存在多餘的字元,那麼這些字元可以被忽略,它們對函式不應該造成影響。
注意:假如該字串中的第一個非空格字元不是一個有效整數字符、字串為空或字串僅包含空白字元時,則你的函式不需要進行轉換,即無法進行有效轉換。
在任何情況下,若函式不能進行有效的轉換時,請返回 0 。
提示:
本題中的空白字元只包括空格字元 ’ ’ 。
假設我們的環境只能儲存 32 位大小的有符號整數,那麼其數值範圍為 [−231, 231 − 1]。如果數值超過這個範圍,請返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
輸入: “42”
輸出: 42
示例 2:
輸入: " -42"
輸出: -42
解釋: 第一個非空白字元為 ‘-’, 它是一個負號。
我們儘可能將負號與後面所有連續出現的數字組合起來,最後得到 -42 。
示例 3:
輸入: “4193 with words”
輸出: 4193
解釋: 轉換截止於數字 ‘3’ ,因為它的下一個字元不為數字。
示例 4:
輸入: “words and 987”
輸出: 0
解釋: 第一個非空字元是 ‘w’, 但它不是數字或正、負號。
因此無法執行有效的轉換。
示例 5:
輸入: “-91283472332”
輸出: -2147483648
解釋: 數字 “-91283472332” 超過 32 位有符號整數範圍。
因此返回 INT_MIN (−231) 。
2.思路:因為不需要讀入空格,因此無論左邊有多少空格直接無視,直接移動str指標到第一個不是空格的位置上。然後判斷符號位,此時存在三種情況:’+’、’-‘和無正負號,因此選擇使用switch,當沒有符號的時候不需要任何操作,當是-號時使flag = -1。因為無論是’+‘還是’-'最後都要使str移動到下一個位置,因此不需要break。排除完不是數字的情況後,逐個將數字字元轉化為整數,同時判斷溢位。寫在迴圈內部的判斷可以使迴圈次數限制在int的最大位數內。
3.Code:
int myAtoi(char* str) {
bool flag = false;
int tMax = INT_MAX / 10;
int i = 0, t = 0, result = 0;
while(str[i]) {
if(str[i] == ‘-’) {
flag = true;
break;
}
else if(str[i] == ‘+’ || (str[i] >= 48 && str[i] <= 57)) {
break;
}
else if(str[i] != ’ ')
return 0;
i++;
}
if(str[i] == ‘-’ || str[i] == ‘+’)
i++;
while(str[i]) {
if(str[i] >= 48 && str[i] <= 57) {
t = str[i] - ‘0’;
if(result > tMax)
return flag ? INT_MIN : INT_MAX;
else if(result == tMax && flag && t >= 8)
return INT_MIN;
else if(result == tMax && !flag && t >= 7)
return INT_MAX;
else
result = result * 10 + t;
}
else
break;
i++;
}
return flag ? -result : result;
}
相關文章
- String to Integer (atoi) 字串轉換整數 (atoi)字串
- Leetcode 8. String to Integer (atoi) 字串轉整數 (atoi)LeetCode字串
- LeetCode-8. 字串轉整數 (atoi)LeetCode字串
- python實現字串轉換整數Python字串
- JZ-049-把字串轉換成整數字串
- 2020-11-13整數轉換為字串 字元反轉字串字元
- 劍指offer(Java版)--將字串轉換為整數Java字串
- 劍指offer——把字串轉換成整數C++字串C++
- C 語言整數與字串的相互轉換介紹字串
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- 轉換成為整數
- JavaScript字串轉換數字JavaScript字串
- JavaScript 字串轉換數值型別JavaScript字串型別
- Thymeleaf將字串轉換為數字字串
- 【Go】IP地址轉換:數字與字串之間高效轉換Go字串
- 資料轉換-整數字節陣列陣列
- mysql 字串和數字比,字串會隱式轉換為數字0MySql字串
- c++中數字和字串的轉換C++字串
- 將數值轉換為字串的函式字串函式
- Octave 數字轉字元,連線兩個字串,以及如何將字串轉換為變數名稱字元字串變數
- 字串-大小寫轉換字串
- list與字串轉換字串
- Day7(字串)|344.反轉字串 541.反轉字串II 54.替換數字字串
- 判斷迴文串 字串/數字相互轉換字串
- PHP 字串強制轉換為數值問題PHP字串
- 翻轉整數
- 反轉整數
- Go 中數字轉換字串的正確姿勢Go字串
- c++中字元、字串和數字間的轉換C++字元字串
- c語言字串與整形,浮點數...相互轉換C語言字串
- 將字串陣列轉換為浮點數陣列字串陣列
- JavaScript字串大小寫轉換JavaScript字串
- 字串 列表 字典 互相轉換字串
- 字串、整數倒序輸出字串
- js小數轉整數JS
- 字串大小寫轉換和字串的比較字串
- {{rateTime}}大括號裡面的數字轉換為字串(日期)字串