字串轉成整數

2021-08-09 21:19:38 字數 2018 閱讀 8640

實現atoi這個函式,將乙個字串轉換為整數。如果沒有合法的整數,返回0。如果整數超出了32位整數的範圍,返回int_max(2147483647)如果是正整數,或者int_min(-2147483648)如果是負整數。

該題目較為複雜,需要分類討論多種情況。題意為將字串中出現的第乙個完整的整數返回,包括"+10" "-10" "   54 abd" "5.6"等情況。所以應該考慮空格、正負號的問題等。另外,對於以0開頭的數字沒有進行考慮,但測試集中並沒有此類資料,因此也通過了測評。

1、當字串為null或者長度是0,肯定是不合法數,直接返回0,否則執行步驟2

2、對字串進行去除兩端空格的操作,然後進行分析,執行步驟3

3、如果2操作之後的字串是空的,那麼是不合法數,直接返回0,否則進行步驟4

4、遍歷字串,獲取字串第乙個字元ch0,建立字元緩衝區,用來儲存有效數字。如果是ch0數字,即ascii碼在'0'和'9'之間,那麼執行步驟5,如果是'+',那麼執行步驟6,如果是'-',那麼執行步驟7,其餘的直接執行步驟8

5、將ch0新增到緩衝區中,繼續遍歷字串,如果是有效的數字,就新增到緩衝區中,否則跳出,進行處理。因為這個數值是非負數,所以可以直接和最大值進行比較即可,鑑於字串轉成數值有大小限制,所以先判斷緩衝區的長度,因為integer的最大值的長度是10,所以如果緩衝區長度大於10,肯定溢位了,所以直接返回最大值,如果沒有那麼使用字串轉long型數進行轉換,然後和最大值進行比較,如果沒有超過範圍就直接返回(int)long值,如果超過了,就直接返回最大值

6、只有當字串的長度大於1並且'+'後面是數字才有可能是合法數,這是乙個判斷條件,如果滿足,則將'+'和後面的數字新增到緩衝區,然後繼續遍歷字串,將有效數字新增到緩衝區,直到遇到非數字字元,跳出處理。對緩衝區的長度進行判斷,如果大於11,那麼肯定溢位,直接返回最大值,否則,使用字串轉long型數進行轉換,和最大值進行比較,如果沒有超過範圍,直接返回(int)long值,否則返回最大值

7、只有當字串的長度大於1並且'-'後面是數字才有可能是合法數,這是乙個判斷條件,如果滿足,則將'-'和後面的數字新增到緩衝區,然後繼續遍歷字串,將有效數字新增到緩衝區,直到遇到非數字字元,跳出處理。對緩衝區的長度進行判斷,如果大於11,那麼肯定溢位,直接返回最小值,否則,使用字串轉long型數進行轉換,和最小值進行比較,如果沒有超過範圍,直接返回(int)long值,否則返回最小值

8、如果第乙個有效字元既不是數字也不是'+' '-'號,那麼就不是合法數,直接返回0

public class solution 

//去除字串兩端的空格

str = str.trim();

//如果去除空格後為空,就直接返回0

if(str.isempty())

//獲取字串第乙個字元,只有第乙個字元是數字或者+-號的時候才有可能是合法數

char ch0 = str.charat(0);

//建立字元緩衝區,用來儲存有效數字

stringbuilder sb = new stringbuilder();

//當第乙個字元是數字時

if(ch0 >= '0' && ch0 <= '9')

else

}//如果緩衝區長度大於10,肯定溢位(不考慮第乙個數字是0的情況)

if(sb.length() > 10)

else

else}}

//如果第乙個字元是'+'

if(ch0 == '+')

else

}//如果長度大於11,肯定溢位(不考慮第乙個數字是0的情況)

if(sb.length() > 11)

else

else}}

}//如果第乙個字元是'-'

if(ch0 == '-')

else

}//如果緩衝區長度大於11,肯定溢位(不考慮初始數字是0的情況)

if(sb.length() > 11)

else

else}}

}//其餘情況,均返回0

return 0;

}}

整數轉成字串

1.使用itoa函式 char itoa int value char string,int radix 原型說明 value 欲轉換的資料。radix 轉換後的進製數,可以是2進製 8進製 10進製 16進製制等。exmaple include include int main void 2.不利...

49 把字串轉成整數

將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入乙個字串,包括數字字母符號,可以為空如果是合法的數值表達則返回該數字,否則返回0示例1 2147483647 1a33 2147483647 0 思路 設定乙個check函式,判斷該字元是否為...

將整型字串轉成整數值

題目 給定乙個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回str所代表的整數值,否則返回0。舉例 str 123 返回123。str 023 因為不符合日常的書寫習慣,返回0。str a123 返回0。str 2147483647 返回2147482647 str 2...