問題描述:輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如輸入字串"345",則輸出整數345。
思路:轉換的過程比較簡單,每次讀入乙個字元,將之前儲存的值乘以10,然後再加上這個字元表示的數字。這是正常情況。這個問題主要是考察各種不正常情況的處理。假設函式的宣告為 int strtoint(const char *str);
(1)輸入的字串指標為空;
(2)數字前面有正負號的處理;
(3)字串表示的數字超過了32位整數能表示的範圍,即溢位處理;
(4)輸入了非法字元,即除了數字及正負號的其他字元;
(5)以字元' 0 '開始的串,' 0 '後面還跟了其他字元,也是非法的。
如果能很好的處理這些情況,那麼程式的健壯性大大增強。其中有兩種情況處理起來有點麻煩,第一,如何處理溢位,我們可以使用std::numeric_limits::max(),可以定義乙個long long的變數,然後與這個最大值相比,從而判斷是否溢位了。第二。由於返回值為乙個整型數,那麼如果轉換失敗,返回什麼呢?如果是'0 ' ,那麼就無法區分正常輸入"0"的情況。兩種方案,修改函式宣告,通過返回值表明轉換的成功與否,或者定義乙個全域性變數,用來儲存轉換的成功與否。參考**中使用了第二種方案。
參考**:先給出的是std::numeric_limits::max()的用法。
#include #include //需包含這個標頭檔案
using namespace std;
int main()
bool strtointok; //全域性的變數
int strtoint(const char *str)
long long result = 0; //轉換的結果
while(str[i] != '\0')
else //正溢位
} else
} strtointok = true;
//結果返回 需強制轉換一下
return minus? (int)(-result):(int)result;
}
字串轉換為整數
class program catch exception ee console.read 轉換類 public class strconverter bool positive true int32 result 0 double tempresult 0 int start 0 while st...
字串轉換為整數
題目 輸入乙個表示整數的字串,把該字串轉換成整數並輸出。例如輸入字串 345 則輸出整數345。分析 這道題儘管不是很難,學過c c 語言一般都能實現基本功能,但不同程式設計師就這道題寫出的 有很大區別,可以說這道題能夠很好地反應出程式設計師的思維和程式設計習慣,因此已經被包括微軟在內的多家公司用作...
字串轉換為整數
字串轉換為整數需要考慮很多種情況,如下 第一種情況 空指標 第二種情況 空字串 第三種情況 空白字元 第四種情況 中間有字母的 int main atoi 函式遇見a就自動停下來了,輸出123 第五種情況 前面有符號的 int main 輸出 12345 第六種情況 前面有空格 int main 輸...