8. String to Integer (atoi)

題目描述

實現一個將字符串轉化為一個整數的函數

思考過程

  1. 先考慮都會有什么可能的輸入情況
    1.1 合法輸入,如:“213”,“+1”,“0”,“-3”
    1.2 非法輸入,如小數:“1.2”;分數:“3/2”;字符:“abc”,“a1”,“1a”;空字符:“ asdfa fasdfgdfg”
  2. 所以應當先判斷輸入是否合法,非法則不執行轉換
  3. int:max=2147483647,min=-2147483648

字符串相關函數:

  1. length():字符串長度
  2. indexOf()、lastIndexOf():確定字符串位置
  3. equals():字符串比較
  4. charAt():得到指定位置的字符
  5. getChars():得到字符串的一部分字符串
  6. subString():提取字符串的另一種方法,它可以指定從何處開始提取字符串以及何處結束
  7. replace():將字符串中的一個字符替換為另一個字符
  8. concat():把兩個字符串合并為一個字符串
  9. toUpperCase()和toLowerCase():分別實現字符串大小寫的轉換
  10. trim():將字符串中開頭和結尾處的空格去掉(本題適用)
  11. valueOf():將任何類型的數據對象轉換為一個字符串
  12. append():在字符串后面追加
  13. insert():在字符串中間插入
  14. setCharAt():改變某個位置所在的字符
  15. 查看更多java字符串操作…

char和int的轉換:

  1. int 轉換成char:
int  n = 1;
char ch = (char)(n + '0');

這樣打印出來ch的值為1;
不過需要注意(因為char只有一個字節),此處的n只能是0-9之間的字符

  1. char轉int:
 char ch = '9';
int n = int(ch) - int('0');

此處ch也是‘0’至‘9’的數字字符

遇到的問題:

  1. char轉換string?
    答:""+char即可轉為string
  2. char轉換int?
    答:見上面
  3. 如何匹配0-9數字?
    答:可以使用正則表達式,設置模板進行匹配,如:
String reg="0|1|2|3|4|5|6|7|8|9";
Pattern p=Pattern.compile(reg);
Matcher m=p.matcher(str);
boolean result=m.find();
  1. 如果字符串不是合法int類型,應該return什么?
    答:有多少是合法的就輸出多少合法的,盡可能的解析

  2. 對于超出int上下限的數值如何處理?
    答:截斷處理,即超出范圍的均輸出最大或者最小值

  3. 如何獲得int的最大最小值?
    答:Integer.MAX_VALUE和Integer.MIN_VALUE

提交狀態:

  1. Runtime Error
    原因:沒有考慮到輸入字符串為空的情況
    解決方法:
if(len==0){
        return 0;
 }
  1. Wrong Answer
    原因:對于類似的不合法字符串,期待輸出是盡可能的解析,自己的理解不到位,對于不合法字符串都輸出了0

Input:" -0012a42"
Output:0
Expected:-12

解決方法:修改return,盡可能解析

  1. Wrong Answer
    原因:int上下限沒有處理

Input:"2147483648"
Output:-2147483648
Expected:2147483647

解決方法:將result類型由int轉為long,并在return之前進行數值大小是否溢出的判斷

long result=0;
...
if(PandN==1 && result>2147483647){
    return 2147483647;
}else if(PandN==(-1) && -1*result<-2147483648){
    return -2147483648;
}else{
    return PandN*(int)result;
}
  1. Wrong Answer
    原因:上次考慮了int上下溢出的問題,但是沒有考慮long上下溢出的問題

Input:"9223372036854775809"
Output:1
Expected:2147483647

解決方法:將判斷尺寸語句內置在每次循環中,實時判定,只要超出int范圍,立即截斷輸出

  1. Accepted
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容