8.、String to Integer (atoi)(字串轉整)
阿新 • • 發佈:2019-01-09
題目要求,就是實現一個atoi函式的功能,將字串轉換成整數。其中,這個題目難度不大,就是有些邊界條件要考慮。
1、資料型別,這個題也要考慮變數的資料型別,因為輸出整數的範圍是[−2^31, 2^31 − 1]。並且,當轉換結果超出了該範圍,即當大於( 2^31 − 1)時,結果則為( 2^31 − 1);若小於(−2^31),則為(−2^31)。
2、在遇見有效數字之前,若出現‘-’,‘+’,‘ ’,‘0’~‘9’之外的字元,則返回0。
3、忽略有效數值之後的字元。
基本上就是這寫要求,其中,在做題的時候,自己所遇到的一個錯誤就是,轉換後的數值超過了給定的數值範圍,所以在遍歷的時候,加上了判定條件,一旦數值大於(2^31),則跳出。程式碼如下所示:
C++:
@by_chandepire
int myAtoi(string str)
{
long long result=0;
long long max = ((long long)1<<31)-1;
long long min = 0 - (1 << 31);
bool sign = 0;
bool start = 0;
int len = str.size();
for(int i=0;i<len && result <= max ;++i)
{
if(start == 0 )
{
if(str[i] == ' ') continue;
else if(str[i] == '-') {
sign = 1;
start = 1;
}
else if(str[i] == '+' )
start = 1;
else if(str[i] >= '0' && str[i] <= '9')
{
start = 1 ;
result = result * 10 + (str[i] - '0');
}
else
break;
}
else
{
if(str[i] >= '0' && str[i] <= '9')
result = result * 10 + (str[i] - '0');
else break;
}
}
result *= (sign)?-1:1;
if(result > max)
return max;
else if(result < min)
return min;
return result;
}
python:
@by_chandepire
def myAtoi(self, str):
"""
:type str: str
:rtype: int
"""
result = 0
max = (1<<31)-1
min = -(1<<31)
sign = 1
start = 0
length = len(str)
str1 = str.lstrip()
for s in str1:
if not start:
if s == '-':
sign = -1
start = 1
elif s == '+':
start = 1
elif s >= '0' and s <= '9':
start = 1
result = result * 10 + (ord(s) - ord('0'))
else:
break
else:
if s >= '0' and s <= '9':
result = result * 10 + (ord(s) - ord('0'))
else:
break
if result > max:
break
result = result * sign
if result > max:
return max
elif result < min:
return min
return result