題目:将一個字元串轉換成一個整數,要求不能使用字元串轉換整數的庫函數。 數值為0或者字元串不是一個合法的數值則傳回0。
輸入描述:輸入一個字元串,包括數字字母符号,可以為空。
輸出描述:如果是合法的數值表達則傳回該數字,否則傳回0
頭:int StrToInt(string str) ;
例如:
輸入:+2147483647 1a33
輸出: 2147483647 0
一個整數,要麼正,要麼負,是以需要先判斷字元串的第一個字元是否為'+'或'-',如果是,那麼需要做一些事情:
//若為負數先讓flag為-1,最後的結果乘以flag:-1 ;若為正數,就不用做什麼,最後的結果乘以flag:1
int flag = 1;
if (str[0] == '-')
flag = -1;
//那麼第0位是+或-,則直接從第1位開始判斷
int i = 0;
if (str[0] == '+' || str[0] == '-')
i++;
好了,接下來進入循環,隻有當字元為'0'到'9'時,它才算是有效的,其他一律無效。
那麼如何轉換為整數呢?其實方法很簡單:
for (; i < length; ++i)
{
if (!(str[i] >= '0' && str[i] <= '9'))
return 0;
ret = ret * 10 + str[i] - '0';
}
接下來是完整代碼:
int StrToInt(string str)
{
int length = str.size();
long long ret = 0;
if (length <= 0)
return 0;
//若為負數先讓flag為-1,最後的結果乘以flag:-1 \
若為正數,就不用做什麼,最後的結果乘以flag:1
int flag = 1;
if (str[0] == '-')
flag = -1;
//那麼第0位是+或-,則直接從第1位開始判斷
int i = 0;
if (str[0] == '+' || str[0] == '-')
i++;
for (; i < length; ++i)
{
if (!(str[i] >= '0' && str[i] <= '9'))
return 0;
ret = ret * 10 + str[i] - '0';
}
return ret * flag;
}