劍指offer——把字符串轉換成整數(c++)


題目描述
請你寫一個函數StrToInt,實現把字符串轉換成整數這個功能。
當然,不能使用atoi或者其他類似的庫函數。

示例 1:
輸入: " -42"
輸出: -42
解釋: 第一個非空白字符為 '-', 它是一個負號。

示例 2:
輸入: "4193 with words"
輸出: 4193
解釋: 轉換截止於數字 '3' ,因為它的下一個字符不為數字。

示例 3:
輸入: "words and 987"
輸出: 0
解釋: 第一個非空字符是 'w', 但它不是數字或正、負號。因此無法執行有效的轉換。

示例 5:
輸入: "-91283472332"
輸出: -2147483648
解釋: 數字 "-91283472332" 超過 32 位有符號整數范圍。 因此返回 INT_MIN (−231) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
注意:

忽略所有行首空格,找到第一個非空格字符,可以是 ‘+/−’ 表示是正數或者負數,緊隨其后找到最長的一串連續數字,將其解析成一個整數;
整數后可能有任意非數字字符,請將其忽略;
如果整數長度為0,則返回0;
如果整數大於INT_MAX(2^31 − 1),請返回INT_MAX;如果整數小於INT_MIN(−2^31) ,請返回INT_MIN;
class Solution {
public:
int strToInt(string str) {
if(str.empty(http://www.my516.com))
return 0;
int flag = 1, i = 0, n = str.size();
long long res = 0;
while(i < n && str[i] == ' ')
++i;
if(i >= n)
return 0;
if(str[i] == '-'){
flag = -1;
++i;
}
if(str[i] == '+'){
if(flag == -1)
return 0;
else
++i;
}
while(str[i] >= '0' && str[i] < '9'){
res = res * 10 + str[i] - '0';
++i;
if(res > INT_MAX)
break;
}
res *= flag;
if(res > INT_MAX)
return INT_MAX;
if(res < INT_MIN)
return INT_MIN;
return res;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

---------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM