題目:
輸入乙個表示整數的字串,把該字串轉換成整數並輸出。
例如:輸入字串"345",則輸出整數345。
完成函式strtoint,實現字串轉換成整數的功能。
分析:首先我們分析如何完成基本功能,即如何把表示整數的字串正確地轉換成整數。
還是以"345"作為例子。當我們掃瞄到字串的第乙個字元'3'時,我們不知道後面還有多少位,僅僅知道這是第一位,因此此時得到的數字是3。當掃瞄到第二個數字'4'時,此時我們已經知道前面已經乙個3了,再在後面加上乙個數字4,那前面的3相當於30,因此得到的數字是3*10+4=34。接著我們又掃瞄到字元'5',我們已經知道了'5'的前面已經有了34,由於後面要加上乙個5,前面的34就相當於340了,因此得到的數字就是34*10+5=345。
分析到這裡,我們不能得出乙個轉換的思路:每掃瞄到乙個字元,我們把在之前得到的數字乘以10再加上當前字元表示的數字。這個思路用迴圈不難實現。
由於整數可能不僅僅之含有數字,還有可能以'+'或者'-'開頭,表示整數的正負。因此我們需要把這個字串的第乙個字元做特殊處理。如果第乙個字元是'+'號,則不需要做任何操作;如果第乙個字元是'-'號,則表明這個整數是個負數,在最後的時候我們要把得到的數值變成負數。
接著試著處理非法輸入。由於輸入的是指標,在使用指標之前,我們要做的第一件是判斷這個指標是不是為空。如果試著去訪問空指標,將不可避免地導致程式崩潰。另外,輸入的字串中可能含有不是數字的字元。每當碰到這些非法的字元,我們就沒有必要再繼續轉換。最後乙個需要考慮的問題是溢位問題。由於輸入的數字是以字串的形式輸入,因此有可能輸入乙個很大的數字轉換之後會超過能夠表示的最大的整數而溢位。
值得一提的是,在c
語言提供的庫函式中,函式
atoi
能夠把字串轉換整數。它的宣告是
intatoi(const
char *str)
。該函式就是用乙個全域性變數來標誌輸入是否合法的。
考點:
程式邏輯非常簡單,但是否能夠寫出穩定性很高的**,這也許是公司看重考察的。所以
一定要仔細分析,多加思考。
在考慮思路時需要注意以下幾點:
1對指標是否做了空的判斷,如果使用了為空的指標將導致程式崩潰
2輸入是否是負數
3輸入是否含有非法字元
4是否資料過大溢位
思路及注意事項:
1.每掃瞄到乙個字元,把之前計算得到的值乘以10再加上當前字元表示的數字值,這個思路用迴圈不難實現。
2.由於整數字串中可能不僅僅含有數字,還有可能以'+'或者'-'開頭,表示整數的正負,如果第乙個字元是'+'號,則不需要做任何操作;如果第乙個字元是'-'號,則表明這個整數是個負數,在最後要把得到的數值變成負數。
3.輸入的字串中可能含有不是數字的字元,每當碰到這些非法的字元,就沒有必要再繼續轉換。
4.還要考慮的問題是溢位問題,由於輸入的數字是以字串的形式輸入,因此有可能輸入乙個很大的數字轉換之後會超過能夠表示的最大的整數範圍從而導致溢位。
#include "stdafx.h"
#include #include /*-------------------------------
把整數字串轉換為整數
---------------------------------*/
int convertstr2interger(const tchar *ptszstr)
else if (0 == i32i && ptszstr[i32i] == _t('-'))
else if (ptszstr[i32i] >= _t('0') && ptszstr[i32i] <= _t('9'))
}else
break;
} if (bminus)
llvalue = -llvalue;
return static_cast(llvalue);
}int _tmain(int argc, _tchar* argv)
每天一道演算法題
no.1 棧是特殊的線性表,它。a.對 b.錯答案 錯,它的插入和刪除都是在同一端進行的。no.2 n個葉子節點的滿二叉樹 除了葉子節點,每個節點都有兩個孩子 總共有多少個節點?a.2n 1 b.2n c.n 1 d.n答案 a 滿二叉樹我們講過了,度為0的節點比度為2的加點多乙個。滿二叉樹是特殊的...
每天一道演算法題
1.給定乙個只包括 的字串,判斷字串是否匹配。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。思路 正確思路 不需要考慮輸入內容是否合法,這只是做題,不是工程 定義乙個字典,後括號為鍵,前半部分為值 定義乙個元素儲存棧頂,注意這個設定,取棧...
每天一道演算法題
1 js計算某個字串出現的次數 j ascript計算乙個字串最多重複的字元及出現次數.var str zhaochucichuzuiduodezifu var o for var i 0,length str.length i length i else console.log o 輸出的是完整的...