1. 程式人生 > >劍指offer------字串------字串轉化為數字

劍指offer------字串------字串轉化為數字

題目

將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為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;
}