劍指Offer-49.把字符串轉換成整數(C++/Java)


題目:

將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值為0或者字符串不是一個合法的數值則返回0

輸入描述:

輸入一個字符串,包括數字字母符號,可以為空

輸出描述:

如果是合法的數值表達則返回該數字,否則返回0

分析:

注意輸入數據的合法性,例如“1234+12”,“12@@#*24”,這樣的都是不合法數值,要返回0的。但是如果第一個字符時+或-時是可以的,且影響最后輸出的符號,最后還要判斷下數字是否超出了范圍。

程序:

C++

class Solution {
public:
    int StrToInt(string str) {
        if(str.size() == 0)
            return 0;
        long long num = 0;
        bool tag = true;
        if(str[0] == '-')
            tag = false;
        for(int i = (str[0] == '+' || str[0] == '-' ? 1 : 0); i < str.size(); ++i){
            if(str[i] >= '0' && str[i] <= '9'){
                num = num * 10 + (str[i] - '0');
            }
            else{
                num = 0;
                break;
            }
        }
        num = tag ? num : (-num);
        if(num > INT_MAX || num < INT_MIN)
            return 0;
        return (int)num;
    }
};

Java

public class Solution {
    public int StrToInt(String str) {
        if(str == null || str.length() == 0)
            return 0;
        long num = 0;
        boolean tag = true;
        if(str.charAt(0) == '-')
            tag = false;
        for(int i = (str.charAt(0) == '+' || str.charAt(0) == '-' ? 1 : 0); i < str.length(); ++i){
            if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){
                num = num * 10 + (str.charAt(i) - '0');
            }
            else{
                num = 0;
                break;
            }
        }
        num = tag ? num : (-num);
        if(num > Integer.MAX_VALUE || num < Integer.MIN_VALUE)
            return 0;
        return (int)num;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM