自己實現乙個 atoi 函式

2021-08-26 23:37:48 字數 1452 閱讀 1246

情況一:輸入的字元包含不是數字字元的字元?

例如:「123adc4」.

針對這種情況,我們只要加上判斷就行了,只要遇到不是數字字元的直接返回。

情況二:如果在數字字元前面有正負號又該怎麼辦???

例如:」-123」、「+123」.

針對這種情況,我們再加上判斷,判斷字串的第乙個字元是不是正負號,並用乙個標記位flag記錄正負。

情況三:當輸入的字串前面幾個字元都是空格又該怎麼辦???

例:「 -123」,「 +123」.

針對這種情況,庫裡面的atoi是將空格跳過再進行判斷的,所以我們在一開始就用迴圈將空格跳過,注意這時候要是字串裡面全部是空格,則我們應該返回乙個值,就返回0吧。

情況四:當輸入的字串中沒有數字時,我們應該返回什麼呢???

我們在這種情況下返回0.

情況五:當字串中的字元數字轉化的整數太大,會有可能溢位???

針對這種情況,我們需要做出乙個判斷,判斷轉化後的數字當它的範圍在long的範圍內。

那麼最重要的乙個問題來了,當你第3、4中情況下,返回的是0,如果輸入「0」返回的也是0,這兩個0怎麼區分呢???,貌似在這裡你把3、4兩種情況下的返回值設定成什麼都不合適。所以我們可以設定乙個全域性變數state,來記錄是不是正常返回。

#include

#include

#include

#include

enum state

state;

state = abnormal; //將初始狀態置為異常

int my_atoi(const

char *src)

if (*src == '\0') //如果這時候字串已經完了,則直接返回

if (*src == '+') //接下來判斷正負

else

if (*src == '-')

while (*src >= '0'&&*src <= '9') //讀取字元數字轉換成整型

src++;

}if (*src == '\0') //正常返回

state = normal; //將狀態置為正常

return (int)ret;

}int main()

; scanf("%s", arr);

int ret=my_atoi(arr);

if (state == abnormal)

printf("異常返回\n");

printf("%d\n", ret);

system("pause");

return

0;}

自己實現的atoi函式

不多說,直接上 include include include int atoi const char str,int len int value 0 int sign 1 const char ptr str const char end str len 跳過開頭的空白符 while ptr en...

自己實現乙個printf函式

在arm嵌入式開發環境中,串列埠一般使用arm pl011的uart實現,uart的實現原理就是實現了乙個8bits寬度,32深度的fifo,不停的往螢幕輸出乙個byte,乙個byte。這個就是硬體的實現,那麼軟體是怎麼實現列印 高階程式語言中定義的char,short,int,long,float...

自己實現乙個Redux。

redux是乙個用於狀態管理的js框架,是flux架構的一種實現 如圖 reducer 為乙個使用者自定義的函式,在store分發 dispacth action時提供處理方法去更新狀態樹中的狀態。應該為乙個純函式。action 為乙個使用者自定義的物件,裡面包含乙個type屬性,標識乙個動作型別。...