C語言模擬實現(xiàn)atoi函數(shù)的實例詳解
C語言模擬實現(xiàn)atoi函數(shù)的實例詳解
atoi函數(shù),主要功能是將一個字符串轉(zhuǎn)變?yōu)檎麛?shù),例如將“12345”–>12345。但在實現(xiàn)過程中,我們難免會因為考慮不夠全面而漏掉比較重要的幾點,今天就總結(jié)一下實現(xiàn)atoi函數(shù)需要注意的地方。
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))//用函數(shù)isspace判斷是否為空白字符
{
str++;
}
//遇到正負號
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;
}
運行結(jié)果:

以上就是C語言模擬實現(xiàn)atoi函數(shù)的實例,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C++對Json數(shù)據(jù)的友好處理實現(xiàn)過程
在Ajax的應(yīng)用中,前臺基本上會用到JSON作為數(shù)據(jù)交換格式,所以下面這篇文章主要給大家介紹了關(guān)于C++對Json數(shù)據(jù)的友好處理,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-02-02
C語言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)
鏈表是線性表的鏈式存儲方式。鏈表的內(nèi)存是不連續(xù)的,前一個元素存儲地址的下一個地址中存儲的不一定是下一個元素。小編今天就將帶大家深入了解一下鏈表,快來學(xué)習(xí)吧2021-12-12

