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.正號與負(fù)號問題
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++;
}
//遇到正負(fù)號
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++使用map實現(xiàn)多進(jìn)程拷貝文件的程序思路
這篇文章主要介紹了C++使用mmap實現(xiàn)多進(jìn)程拷貝文件,通過本文給大家分享程序思路及完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
C++如何比較兩個字符串或string是否相等strcmp()和compare()
這篇文章主要介紹了C++如何比較兩個字符串或string是否相等strcmp()和compare()問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
C語言數(shù)學(xué)問題與簡單DP01背包問題詳解
這篇文章主要介紹了C語言數(shù)學(xué)問題買不到的數(shù)目、螞蟻感冒、飲料換購與簡單DP01背包問題的解決,屬于藍(lán)橋杯省賽中的題目,感興趣的同學(xué)來看看吧2022-04-04
C++ 模擬實現(xiàn)list(迭代器)實現(xiàn)代碼
這篇文章主要介紹了C++ 模擬實現(xiàn)list(迭代器)實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05
C++面試基礎(chǔ)之static關(guān)鍵字詳解
這篇文章主要給大家介紹了關(guān)于C++面試基礎(chǔ)之static關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
C++實現(xiàn)LeetCode(59.螺旋矩陣之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(59.螺旋矩陣之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++中的多態(tài)與多重繼承實現(xiàn)與Java的區(qū)別
這篇文章主要介紹了C++中的多態(tài)與多重繼承實現(xiàn)與Java的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

