1. 程式人生 > >實現atoi這個函式,將一個字串轉換為整數。如果沒有合法的整數,返回0。如果整數超出了32位整數的範圍,返回INT_MAX(2147483647)如果是正整數

實現atoi這個函式,將一個字串轉換為整數。如果沒有合法的整數,返回0。如果整數超出了32位整數的範圍,返回INT_MAX(2147483647)如果是正整數

public class Solution {
    /**
     * @param str: A string
     * @return: An integer
     */
    public int atoi(String str) {
        // write your code here
       int i=0,j=0;
       int str_to_int = 0;
       int asc=0;
    
    //除去空字串
    str = str.trim();
    for(;i<str.length();i++){
        asc =(int)str.charAt(i);
        //首位是否為符號
        if(i==0){
       
        if(asc==43||asc==45||(asc>=48&&asc<=57))
        continue;
        //首位不是符號也不是數字跳出
        else 
        return 0;
        }else {
        //如果有小數點
if (asc==46) {
//判斷左右是否為數字
if((int)str.charAt(i+1)>=48&&(int)str.charAt(i+1)<=57)
continue;
else
return 0;
}
//當遇到非數字跳出
if((asc<48||asc>57)&&asc!=46) {
//非數字前還是非數字返回0
if(str.charAt(i-1)<48||(int)str.charAt(i-1)>57)
return 0;
else
break;
}
}
            
        }
        //擷取字串
        if(i>0){
            str = str.substring(0,i);
        }else{
            return 0;
        }
        
        //無符號時,判斷數字位前9為和214748364比較,如果大於直接返回,等於再比較最後一位
        if(str.charAt(0)!='-'&&str.charAt(0)!='+'){
            
            for(j=0;j<i;j++){
                if(str.charAt(j)>=48&&str.charAt(j)<=57){
                    if(j<9){
                        
                        str_to_int = str_to_int*10 + (int)str.charAt(j)-48;
                    }else{
                        if(Double.valueOf(str_to_int).intValue()>214748364){
                            return 2147483647;
                        }else if(Double.valueOf(str_to_int).intValue()==214748364){
                            if((int)str.charAt(j)>7)
                                return 2147483647;
                        }
                    } 
                }else{
                    return Double.valueOf(str.substring(0,j)).intValue();
                }
            }
        }else{
        
           //有符號時,去掉符號判斷前九位與214748364比較,大於直接返回,等於再判斷,分+-號判斷
            for(j=1;j<i;j++){
                if(str.charAt(j)>=48&&str.charAt(j)<=57){
                    if(j<10){
                        
                        str_to_int = str_to_int*10 + (int)str.charAt(j)-48;
                    }else{
                        if(Double.valueOf(str_to_int).intValue()>214748364){
                            return 2147483647;
                        }else if(Double.valueOf(str_to_int).intValue()==214748364){
                            if(str.charAt(0)=='-'){
                                if((int)str.charAt(j)-48>8){
                                    return -2147483648;
                                }
                            }else{
                                if((int)str.charAt(j)-48>7){
                                    return 2147483647;
                                }
                            }
                            
                        }
                    } 
                }else{
                    return Double.valueOf(str.substring(0,j)).intValue();
                }
            }
            
            
        }
        
        return Double.valueOf(str.substring(0,j)).intValue();
    }
}

相關推薦

實現atoi這個函式一個字串轉換整數如果沒有合法整數返回0如果整數超出32整數範圍返回INT_MAX(2147483647)如果整數

public class Solution {    /**     * @param str: A string     * @return: An integer     */    public int atoi(String str) {        // write your code here 

【劍指offer】請實現一個函式一個字串中的每個空格替換

劍指offer 題目如下 請實現一個函式,將一個字串中的每個空格替換成"%20"。 例如,當字串為We Are Happy, 則經過替換後的字串為 We%20Are%20Happy。 具體的程式碼實現如下 1.遍歷實現 public class Solution {

實現一個函式一個字串中的每個空格替換成指定符號

題目描述 請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 /* 思路:從前向後記錄‘ ’數目,從後向前替換‘ ’。 重點:從後向前替換的時候的技巧 例如:“we are lucky”

java 劍指offer 第二題:請實現一個函式一個字串中的空格替換成“%20”例如字串We Are Happy.則經過替換之後的字串We%20Are%20Happy

** public class Solution { public String replaceSpace(StringBuffer str) { 首先程式給出的引數是StringBuffer類,那麼我首先考慮的是就呼叫StringBuffer類的相關方法完成操作。

實現一個函式一個字串轉換整數

作者:翁鬆秀 劍指offer之“把一個字串轉換成整數” 很多人看到這麼簡單的面試題目,都是大筆一揮,立馬寫下洋洋灑灑函式: int StringToInt(char* string){ int num = 0; while(*str

《劍指offer》-一個字串轉換一個整數要求不能使用字串轉換整數的庫函式

/* * 將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 * 數值為0或者字串不是一個合法的數值則返回0 獲得123的方法:首先1*10+2=12,12*10+3=123 備註:字元'0'對應的ASCII碼值是48(轉化為int型別),而字元'9'對應的

寫一函式一個字串中的母音字母複製到另一個字串然後輸出

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (sc

編寫程式實現atoi()一個字串轉化一個整型數值如:“65321”轉化後65321

#include <stdio.h>int main(int argc, const char *argv[]){    char buf[1024];    int i=0;    int s=0;    printf("please input a strin

寫一函式一個字串中的母音字母複製到另一個字串然後輸出

ae #include<stdio.h> #include<string.h> void str(char a[100],char b[100]) { int i=0, j=0; while(a[i]!='\0')//'\0'代表ASCLL碼0的字元,即是一個空操作符也就是是結束符;

一個字串轉化整數——微軟面試題

github地址:https://github.com/ALXlixiong/offer 題目描述:將一串由數字(可能包含正負號)組成的字串轉化為整數; 注意事項: (1)判斷字串是否為空; (2)判斷數字是否溢位(正負號) (3)是否含有其他符號 程式碼: #inclu

javaJSON字串轉換實體類物件基於net sf json實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

每天一道LeetCode-----使用最少的操作一個字串轉換成另一個字串只有插入刪除替換三種操作

Edit Distance 題目要求,輸入兩個字串word1和word2,計算可以將word1轉換成word2的最小的操作次數,可以執行的操作如下,每個操作算作1次 將word1的某個字元刪除 在word1當前位置插入一個字元 將word1當前位置的字

eval 一個字串轉換成list

test='[{ "a": "1","b": "8"}, {"c": "2","d": "1"}, {"e": "5","f": "2"}]' test = eval(test) print(type(test)) for i in test: print(i) print(test)

html 頁面/jsp 頁面 日期格式的轉換日期格式轉換字串型別

jsp 頁面 引入jstl標籤庫中fmt <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 使用標籤進行日期Date型別到String 字串的轉化 <fmt:formatDate valu

Python解密網易雲音樂.ncm檔案.ncm檔案轉換.mp3檔案實現隨處播放(另附C++已編譯轉換器)

網易雲音樂把.mp3音樂檔案加密為.ncm檔案,導致不能將下載好的音樂複製到其它裝置或使用非網易雲音樂播放器播放,該程式可將.ncm檔案逆向解密為.mp3檔案並保留最高音質。 另有C++已編譯.exe轉換器,將.ncm檔案拖到.exe上直接執行轉換,生成.mp3檔案在.ncm檔案相同路徑。點選下

Sql Server 中將由逗號“”分割的一個字串轉換一個表集並應用到 in 條件中

Sql Server 中將由逗號“,”分割的一個字串,轉換為一個表,並應用與 in 條件 select * from tablenmae where id in(1,2,3) 這樣的語句和常用,但是如果in 後面的 1,2,3是變數怎麼辦呢,一般會用字串連

javascript 一個轉換字串

javascript 將一個值轉換為字串有兩種方式。 第一種是 toString() 方法。 數值,布林值,物件和字串值都有 toString() 方法,但是 null 和 undefined 沒有這個方法。 多數情況下呼叫 toString() 方法不必傳遞引數。但是,在呼叫數值的