1. 程式人生 > 實用技巧 >atoi庫函式模擬實現

atoi庫函式模擬實現

//第一次嘗試:
#define
_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int myAtoi(const char* str) { char TS[1024] = { 0 }; char* ts = TS; //設定符號位,用來判定這樣的情況:不見可字元,數字,不可見字元,數字 //如果前面為不可見字元,在遇到數字後,flag1就++,這樣就不會進入後面的不可見字元 int flag1 = 0; //外部迴圈判定前面的 數字、正負號、不可見字元 while
((*str > 47 && *str < 58)||((*str==43||*str==45)&&flag1==0)||(*str>=0&&*str<=32&&flag1==0)) { //內部迴圈判定出現數字之後的 不可見字元、正負號 if ((*str > 47 && *str < 58)||((*str == 43 || *str == 45))) { *ts = *str; ts++; str
++; flag1++; } else { str++; } } *ts = '\0'; int i = 0; //設定符號位,如果是‘-’,那麼flag就加一 int flag = 0; if (TS[i] == 45) { i++; flag++; } int ret = 0; while (TS[i] != '\0') { ret += (TS[i] - 48); ret
*= 10; i++; } ret /= 10; //將數字篩選出來轉換成對應的整形之後,如果flag==1,那麼就讓數字減去自己的二倍,即可獲得對應數字的負值 if (flag == 1) { return ret - ret * 2; } //如果flag==0,那麼正常輸出轉化好的數字 return ret; } int main() { printf("輸入一串字串:\n"); char str[1024] = { 0 }; int i = 0; char c = 0; scanf("%c", &c); while (c != '\n') { str[i] = c; scanf("%c", &c); i++; } printf("%s\n", str); int ret = myAtoi(str); printf("%d\n", ret); /*int a = atoi(" 123 123jklb"); printf("%d\n", a);*/ return 0; }
//用法:將字串裡的數字字元轉化為整形數。返回整形值。
//注意:轉化時跳過前面的不可見字元,直到遇上數字或正負符號才開始做轉換,
//      而再遇到非數字或字串結束時('\0')才結束轉換,並將結果返回。

//具體轉化思路見上面程式碼的註釋