程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> leetcode:String to Integer (atoi)

leetcode:String to Integer (atoi)

編輯:C++入門知識

leetcode:String to Integer (atoi)


一、 題目

題目目的很明顯,就是將一個字符串轉換成整數,也就是平時經常用到的atoi.

二、 分析

題目其實不難,不過需要注意下面幾點:

1、字符串前的空白

2. 字符串所表示數值的正負號

3. 結束條件,遇到非數字或者字符'\0'結束

4. 考慮溢出,與int值所能表示的最大(0x7fffffff)和最小值進行比較

5. 考慮異常輸入情況下,用全局變量valid來標識,對於"+/-" "0" "+abc"需要進行區分

6、還有就是測試過程中發現的對於“+-2”的處理是返回0;對於超出范圍的數,如果是正數則將其置為(0x7fffffff), 如果為負數則將其置為(- 0x7fffffff – 1)。我在這兩個地方都出錯了….所以,在我們考慮到這些情況後,我們不難寫出程序。如下:

class Solution {
public:
    int atoi(const char *str) {
    	//正負數標識 
    	bool flag = false;
    	//作為負數是否小於0x80000000的標識 
    	int tmin = 0;
    	long long sum = 0;
    	//判斷字符串是否為空 
    	if(str == NULL)
    		return 0;
    	//去除前置空格	
    	while(*str == ' ')
    		str++;	
    	//判斷數的符號,當時以為可以有多個符號取最後一個呢,後來發現只允許一個符號位	
    	if(*str == '-'){
    			flag = true;
    			str++;
    	}
		else if(*str == '+'){
    		str++;
    	}
    	//判斷數的合法性 
    	if(*str < '0'|| *str >'9')
    			return 0;
    	//處理有效字符的值 
    	while(*str>='0'&&*str<='9'){
    		sum = sum * 10 + *str -'0' ;
    		//判斷是否超過了規定的范圍 
    		if( !flag && sum > (int)0x7FFFFFFF){
    			sum = (int)0x7FFFFFFF;
    			break;
    		}else if( flag && sum > (int)0x7FFFFFFF){
    		    sum = (int)0x7FFFFFFF;
    		    tmin = 1;
    			break;
    		}
    		str++;
    	}
    	//判斷數的符號 
    	if(flag&&tmin)
    		sum = -sum-1;
    	else if(flag&&!tmin)
    	    sum = -sum;
    	return sum;
    }
};


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved