C語言模擬實現atoi函數的實例詳解
更新時間:2017年08月11日 14:18:13 作者:卡哇伊的檸檬
這篇文章主要介紹了C語言模擬實現atoi函數的實例詳解的相關資料,atoi函數,主要功能是將一個字符串轉變?yōu)檎麛?,這里就實現這樣的函數,需要的朋友可以參考下
C語言模擬實現atoi函數的實例詳解
atoi函數,主要功能是將一個字符串轉變?yōu)檎麛担鐚ⅰ?2345”–>12345。但在實現過程中,我們難免會因為考慮不夠全面而漏掉比較重要的幾點,今天就總結一下實現atoi函數需要注意的地方。
1.指針為NULL
2.字符串為空字符串
3.空白字符
4.正號與負號問題
5.溢出問題
6.異常字符處理
接下來看代碼:(具體幾種問題處理都在代碼的注釋中說明)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <assert.h> //定義兩個枚舉常量來表示狀態(tài) enum STATE { VALID, //合法 INVALID,//非法 }; enum STATE state = INVALID; int my_atoi(const char *str) { int flag = 1; long long ret = 0;//定義為比int存儲范圍還要大的類型,防止后面判斷溢出時出錯。 //空指針 assert(str); //空字符串 if (*str == "\0") { return 0; } //空白字符 while (isspace(*str))//用函數isspace判斷是否為空白字符 { str++; } //遇到正負號 if (*str == '-') { flag = -1; str++; } if (*str == '+') { str++; } // while (*str) { //if (*str >= '0'&&*str <= '9') if (isdigit(*str))//用函數isdigit判斷是否為數字字符 { ret = ret * 10 + flag*(*str - '0'); //判斷是否溢出 if (ret > INT_MAX || ret < INT_MIN) { return ret; } } //異常字符 else { break; } str++; } state = VALID; return ret; } int main() { char *p = "12345"; char *q = " -12345"; int ret = my_atoi(p); int ret2 = my_atoi(q); printf("%d\n", ret); printf("%d\n", ret2); system("pause"); return 0; }
運行結果:
以上就是C語言模擬實現atoi函數的實例,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章: