劍指offer------字串------字串轉化為數字
阿新 • • 發佈:2018-12-09
題目
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。
輸入描述:
輸入一個字串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0
示例1
輸入
-2147483647
1a33
輸出
-2147483647
0
思路
這道題要考慮全面,對異常值要做出處理。
對於這個題目,需要注意的要點有:
- 指標是否為空指標以及字串是否為空字串;
- 字串對於正負號的處理;
- 輸入值是否為合法值,即小於等於'9',大於等於'0';
- int為32位,需要判斷是否溢位;
- 使用錯誤標誌,區分合法值0和非法值0。
程式碼中用兩個函式來實現該功能,其中標誌位g_nStatus用來表示是否為異常輸出,minus標誌位用來表示是否為負數。
程式碼:
int strzhuanint(char *str) { int temp=0; const char *ptr =str; //ptr儲存str的頭部 if(*str=='-'||*str=='+') { str++; } while(str!=NULL && *str!='\0') //字串為空 或者 空字串 { if((*str<'0')||(*str>'9')) { break; } temp=temp*10+(*str-'\0'); //轉化為數字 if((temp > 0x7fffffff) || (temp < (signed int)0x80000000)) // 判斷是否溢位,32位 { temp = 0; break; } if(*ptr=='-') { temp=-temp; } return temp; }