字串轉換成整數

來源:互聯網
上載者:User

標籤:

問題描述:輸入一個由數字組成的字串,把它轉換成整數並輸出,要求不能使用系統提供的轉換函式或方法。

             例如:輸入字串"123",輸出整數123。

             許多程式設計語言提供了字串和各種類型的轉換的函數或方法,但是我們也要會自己編寫相應的轉換方法或函數,其他類型的轉換與此類似。

             這裡我以字串轉換為整型為例,進行介紹。

   分析:基本思路是從左至右掃描字串,把之前得到的數字乘以10,再加上當前字元表示的數字。但是在轉換的過程中,需要注意幾個問題。  

            1、Null 字元串輸入:輸入的是Null 字元串,對Null 字元串進行轉換,程式可能會崩潰,因此需要先判斷字串是否為空白。我們約定,當字串為空白時,返回0.

            2、正負符號:字串可能不僅包含數字,還有可能是以‘+‘或‘-‘開頭表示的正負整數字串,因此需要對第一個字元進行特殊處理。

            3、非法字元:輸入的字串中可能含有不是數字,也不是"+"或者"-"這樣的字元。因此,我們約定,每當碰到這些非法的字元時,停止轉換,返回0。

            4、整型溢出:輸入的數字是以字串的形式輸入,因此輸入一個很長的字串將可能導致溢出。因此要考慮邊界問題。 我們約定:

                               當轉化的值大於整型的最大值時,返回整型的最大值;

                               當轉換的值小於整型的最小值時,返回整型的最小值;

           上述四個問題中,最難處理的是溢出問題,因此,對於溢出,有兩種方法去解決。

            方法一:定義一個更大範圍的變數,作為轉換結果,並將轉換結果與整型的最大值和最小值進行比較,判斷是否溢出。此種方法比較簡單,我不再寫程式實現。

            方法二:讀者可以結合下面的代碼理解,在轉換某位字元之前,

                       對於正整數,先比較之前轉換的結果(本代碼中為strint)和max / 10的大小,即:

                                        若strint > max / 10,那麼說明最後一步轉換時,strint *10必定大於max,此時直接返回max。

                                        若strint == max / 10 ,那麼比較該位元字 c 和 max % 10的大小,如果c > max % 10,直接返回max。

                       對於負整數,同樣先比較之前轉換的結果(本代碼中為strint)和min / 10的大小,即:

                                        若-1*strint < min / 10,那麼說明最後一步轉換時,-1*strint *10必定小於min,此時直接返回min。

                                        若-1*strint == min / 10 ,那麼比較該位元字 -1*c 和 min % 10的大小,如果 -1*c < min % 10,直接返回min。

             由於第二種方法比較麻煩,這裡我給出第二種方法的Java程式碼,代碼寫法都比較通用,讀者可以很容易的轉換為其他語言實現。

             需要注意,Java中整型佔4個位元組,不同的程式設計語言可能不太一樣,讀者需要結合自己的程式設計語言進行適當的調整。

             綜上所述:完整的Java代碼如下:

            

 1 import java.util.*; 2  class Test { 3       public static int StringToInt(String str){ 4          int n=str.length(); 5          int strint=0; 6          int sign=1;                                //符號標誌 7          if(n==0)return 0;                          //如果字串為空白,則返回 0 8           9          if(str.charAt(0)==‘+‘)                     //預先處理第一個字元,因為第一個字元可能帶有符號位10              sign=1;11          else if(str.charAt(0)==‘-‘)12              sign=-1;13          else if(str.charAt(0)>=‘0‘&& str.charAt(0)<=‘9‘)14                  strint=str.charAt(0)-‘0‘;15               else  return strint;16          17          int max=(int)(Math.pow(2,31)-1);            //整數為正數的最大值 ,由於Java中整形佔4個位元組,不同的語言可能不太一樣,讀者需要自己調整18          int min=(int)Math.pow(-2,31);               //整數為負數的最小值19          for(int i=1;i<n;i++)                           //依次處理後續字元20          {   21              if(str.charAt(i)<‘0‘ || str.charAt(i)>‘9‘)return 0;      //如果後續字元中出現非數字字元,則直接返回 022              int c=str.charAt(i)-‘0‘;23              if(sign==1 && (strint > max / 10 || (strint == max / 10 && c > max % 10)))    //最大值越界處理24                  return max;25              if(sign==-1 && (-1*strint <min/10 || (-1*strint== min / 10 && -1*c < min % 10)))  //最小值越界處理26                  return min;27             28              strint=strint*10+c;                     //正常處理字串每一位 的字元 29          }30          return sign*strint;                        //正常返回結果31       }32     }33  34 public class Main {35     public static void main(String[] args) {36       String str=new String("-21474836");        //讀者可以根據需要進行各種測試,這裡不再舉例37       System.out.println("str="+str);38       System.out.println("轉換為整型後為:"+Test.StringToInt(str));39       40     }41 42 }
View Code

輸出結果為:

str=-21474836
轉換為整型後為:-21474836

讀者可以自己再舉例進行驗證。

 

 這個題目給出了將字串轉換為整數的方法和需要注意的幾個問題,實際編程中,還會有其他類似的轉換問題,比如將字串轉換為浮點型(還要考慮小數點問題),等等。

 但是這個題目給了我們一種轉換的思路,還有需要注意的問題,總之,針對每個類型,要仔細考慮每個類型的特殊情況。關於其他類型的轉換,本文不再祥述,讀者可以照著這種思路進行考慮編程即可。

           

字串轉換成整數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.