C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解
C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解
atoi函數(shù),主要功能是將一個(gè)字符串轉(zhuǎn)變?yōu)檎麛?shù),例如將“12345”–>12345。但在實(shí)現(xiàn)過(guò)程中,我們難免會(huì)因?yàn)榭紤]不夠全面而漏掉比較重要的幾點(diǎn),今天就總結(jié)一下實(shí)現(xiàn)atoi函數(shù)需要注意的地方。
1.指針為NULL
2.字符串為空字符串
3.空白字符
4.正號(hào)與負(fù)號(hào)問(wèn)題
5.溢出問(wèn)題
6.異常字符處理
接下來(lái)看代碼:(具體幾種問(wèn)題處理都在代碼的注釋中說(shuō)明)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <assert.h> //定義兩個(gè)枚舉常量來(lái)表示狀態(tài) enum STATE { VALID, //合法 INVALID,//非法 }; enum STATE state = INVALID; int my_atoi(const char *str) { int flag = 1; long long ret = 0;//定義為比int存儲(chǔ)范圍還要大的類(lèi)型,防止后面判斷溢出時(shí)出錯(cuò)。 //空指針 assert(str); //空字符串 if (*str == "\0") { return 0; } //空白字符 while (isspace(*str))//用函數(shù)isspace判斷是否為空白字符 { str++; } //遇到正負(fù)號(hào) if (*str == '-') { flag = -1; str++; } if (*str == '+') { str++; } // while (*str) { //if (*str >= '0'&&*str <= '9') if (isdigit(*str))//用函數(shù)isdigit判斷是否為數(shù)字字符 { 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; }
運(yùn)行結(jié)果:
以上就是C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C++對(duì)Json數(shù)據(jù)的友好處理實(shí)現(xiàn)過(guò)程
在Ajax的應(yīng)用中,前臺(tái)基本上會(huì)用到JSON作為數(shù)據(jù)交換格式,所以下面這篇文章主要給大家介紹了關(guān)于C++對(duì)Json數(shù)據(jù)的友好處理,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)
鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)方式。鏈表的內(nèi)存是不連續(xù)的,前一個(gè)元素存儲(chǔ)地址的下一個(gè)地址中存儲(chǔ)的不一定是下一個(gè)元素。小編今天就將帶大家深入了解一下鏈表,快來(lái)學(xué)習(xí)吧2021-12-12C++插件化 NDD源碼的插件機(jī)制實(shí)現(xiàn)解析
這篇文章主要介紹了C++插件化 NDD源碼的插件機(jī)制實(shí)現(xiàn)解析,這里再介紹推薦下優(yōu)秀的國(guó)產(chǎn)軟件開(kāi)源項(xiàng)目?NDD(notepad--),一個(gè)支持windows/linux/mac的文本編輯器,目標(biāo)是要國(guó)產(chǎn)替換同類(lèi)軟件,需要的朋友可以參考下2023-03-03