題目:將一個字符串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字符串轉換整數的庫函數。 數值爲0或者字符串不是一個合法的數值則返回0。
輸入輸出描述:輸入一個字符串,包括數字字母符號,可以爲空。如果是合法的數值表達則返回該數字,否則返回0
輸入:+2147483647 輸入:2147483647 輸出:1a33 輸出:0
分析:需要考慮:(1)輸入空串(2)邊界條件(上下溢出)(3)正負號(4)前面的空格需要跳過(5)不合法的輸入,有時候還要區分輸出0到底是不合法的數字串導致還是空串導致,這時候可以用一個全局的標誌位來處理
int StrToInt(string str) {
//字符串->整數
//數值爲0,或者字符串不合法輸出0
int len=str.size();
if(len==0)
return 0;
int flag=1;//用來標記正負的
int i=0;
if(str[0]=='+')
{
i++;
}
else if(str[i]=='-')
{
flag=-1;//表示是負數
i++;
}
int sum=0;
while(str[i]!='\0')
{
while(str[i]==' ')//前面的跳過空格
{
i++;
}
if(isdigit(str[i]))//是數字
{
sum=sum*10+str[i++]-'0';
//邊界考慮
if(sum*flag>INT_MAX)
{
return INT_MAX;
}
if(sum*flag<INT_MIN)
{
return INT_MIN;
}
}
else//不合法的字符串
{
sum=0;
break;
}
}
return sum*flag;//注意乘上這個正負標誌
}