C語言50題之模擬實現atof、atoi
atof,就是 把字串轉換成浮點數,這個函式就可以完成,他們的家族有很多:atoi,itoa,其中的意思,就不詳細說了,這裡舉出一個即可,都是一個家族的嘛,都與規律的。
首先說一下關於字串轉換成數字的問題,例如:“12345”要轉換就是12345,那麼,要是字串中出現其他的字元,例如:“123ah”,這種情況呢?
顯然這就是異常了,我們要寫好這個函式,首先就得分析一下這個異常處理的情況:
首先應處理的就是空;如果是空,那就算了;然後就是正負號;然後是小數點;最後就是正常的情況處理了。話不多說,來看看吧!
模擬實現atof
//模擬實現atof
double my_atof(char const *p)
{
double ret = 0;
int flag = 1;
int count = 0;
assert(p != NULL);
while (isspace(*p))
{
p++;
}
while (*p)
{
if (count)
{
count = count * 10;
}
if (*p == '+')
p++;
else if (*p == '-')
{
p++;
flag = -1;
}
else if (*p == '.')
{
count++;
p++;
}
else if (*p >= '0'&& *p <= '9')
{
ret = ret * 10 + (*p - '0');
p++;
}
else
return 0;
}
return ret*flag / count;
}
int main()
{
printf("%f\n", my_atof(" +23.45"));
printf("%f\n", my_atof(" -2.345"));
printf("%f\n", my_atof("+234.5"));
printf("%f\n", my_atof("-23.45"));
printf("%f\n", my_atof("2.345"));
printf("%f\n", my_atof("234.5"));
printf("%f\n", my_atof(" ."));
printf("%f\n", my_atof("12.3ab"));
system("pause");
return 0;
}
這裡總共列舉了幾個情況,根據它們的輸出結果,或許會得出一些結論:
atoi的實現和atof的是一樣的,畢竟是一個家族的:
atoi() 函式會掃描引數 str 字串,跳過前面的空白字元(例如空格,tab縮排等,可以通過 isspace() 函式來檢測),直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時(‘\0’)才結束轉換,並將結果返回。
相關文章
- C語言實戰!!!:商城系統模擬C語言
- 模擬實現不受限制的字串函式--C語言版字串函式C語言
- 作業系統:程式狀態轉換模擬,C語言實現作業系統C語言
- c語言與字串相關的庫函式的模擬實現C語言字串函式
- JavaScript專題之模擬實現bindJavaScript
- JavaScript專題之模擬實現newJavaScript
- c語言模擬Python的命名引數C語言Python
- 50.C++物件模型的分析(上)(C語言實現物件導向特性)C++物件模型C語言
- PAT-B 1059 C語言競賽【模擬】C語言
- c語言實現貓吃老鼠的問題C語言
- JavaScript專題之模擬實現call和applyJavaScriptAPP
- 掃雷--C語言實現C語言
- c語言實現階乘C語言
- C語言-字串函式的實現(五)之strstrC語言字串函式
- C語言-字串函式的實現(一)之strlenC語言字串函式
- C語言__LINE__實現原理C語言
- C語言實現檔案加密C語言加密
- c語言實現this指標效果C語言指標
- 高精度加法(C語言實現)C語言
- C語言實現TCP通訊C語言TCP
- 回溯和遞迴實現迷宮問題(C語言)遞迴C語言
- C 語言實現整數快速模除(modulo)和地板除(floordiv)
- NOIP模擬50
- C語言-記憶體函式的實現(二)之memmoveC語言記憶體函式
- C語言-記憶體函式的實現(一)之memcpyC語言記憶體函式memcpy
- 《明解C語言》練習題4-2的實現C語言
- 排序演算法-C語言實現排序演算法C語言
- 高精度減法(C語言實現)C語言
- C語言實現推箱子游戲C語言
- C語言實現繼承多型C語言繼承多型
- C語言實現桌面貪吃蛇C語言
- javascript之模擬call以及apply實現JavaScriptAPP
- 自己用C語言寫的一個模擬退火演算法C語言演算法
- 面試挖坑題:之C語言底層操作問題面試C語言
- 力扣566. 重塑矩陣-C語言實現-簡單題力扣矩陣C語言
- 用java語言,模擬實現作業系統的銀行家演算法。Java作業系統演算法
- Object-C語言Block的實現方式ObjectC語言BloC
- C 語言實現泛型 swap 函式泛型函式
- PID演算法的C語言實現演算法C語言