劍指offer 把字符串轉化為整數


題目描述

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

輸入描述:

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

輸出描述:

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

輸入

+2147483647
    1a33

輸出

2147483647
    0




思路:字符串轉化為整數的方法num = num * 10 + str[i] - '0';
特殊情況:1、輸入字符串為NULL;

2、輸入字符串只有+/-;
3、轉化的數字大於最大值或小於最小值;
4、輸入的字符串有字母。
使用一個全局變量進行處理,因為非法情況需要返回0,但是字符串只有0時,也只能返回0,需要使用一個全局變量來進行辨別。
全部變量賦值技巧,首先賦值為true,進行程序就需要賦值為false,如果沒有進行運算,說明是非法情況1、2,調用函數后,
如果是最大最小值退出的情況,全部變量也是false,只有正常處理完字符串遇到\0之后,才能修改全局變量,變為true。

class Solution {
public:
    bool status = false;//false是非法的,true是合法的
    /*1 輸入為空
    2 輸入含有字母 
    3 輸入只有+- 
    4最大最小值超限  
    */
    long long solution(char* str,int minus){
        long long num = 0;
        int i = 0;
        for(i = 0;str[i] != '\0';++i){
            if(str[i] >= '0' && str[i] <= '9'){//是數字就計算             
                num = num * 10 + str[i] - '0';
                /*if(minus && num > 0x7FFFFFFF || !minus && -num < (signed int) 0x80000000){
                    num = 0;
                    break;
                }*/
            }
            else{//不是數字就退出
                num = 0;
                break;
            }         
        }
        if(str[i] == '\0'){
            status = true;
        }
        return minus == -1 ? -num : num;
    }
    int StrToInt(string str) {
        if(str.size() == 0){
            return 0;
        }
        //find + / -
        status = true;
        int minus = 1;
        char *p = new char(str.size() + 1);
        char * tmp = p;
        strcpy(p,str.c_str());//首先判斷是正數還是負數
        if(p[0] == '+'){
            minus = 1;
            ++p;
        }
        if(p[0] == '-'){
            minus = -1;
            ++p;
        }
        
        int result = 0;//首先初始化為0,如果只有一個+/-那么不會調用函數直接返回0
        if(*p != '\0'){//可以判斷只有一個+/-
            result = solution(p,minus);
        } 
        delete[] tmp;//刪除首地址開始的那一片內存地址。
        return result;
    }
};

delete刪除的必須是首地址,因為p已經發生了移位操作不是首地址了,所以需要最開始的保存首地址。





免責聲明!

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



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