2015-12-21 40 views
0

我在記錄函數atoi有問題。下面是代碼(只是函數體)試圖重新創建函數atoi

int atoi2(const char *s) { 
    int i, sum = 0; 
    for (i = 0; isdigit('*s') == 1; s++) { 
     sum = (sum * 10) + *s; 
     i++; 
    } 
    return sum; 
} 

每當我參數中調用函數的字符串(如「12345」),我只是得到。似乎它通過for循環。

同時,是的,我所使用的報頭

#include<ctype.h> 

用於使用函數INT ISDIGIT(INT)

+0

您總是將'* s'的整數值傳遞給isdigit。 – SBI

+0

我用(* s)試過,但結果相同。 –

回答

1

你的代碼有兩個問題,其中一個我希望我的評論可以消除,所以你可以找到另一個。首先,您始終使用相同的值調用isdigit,而不是字符串中的當前字符。通過刪除圍繞*s的單引號可以解決這個問題。其次,你從來沒有真正做過從角色到數字的任何轉換。爲此,需要了解關於ascii的一些知識(並且一些雙重檢查標準是否在你身邊:How to convert char to integer in C?)。有了這兩個更正,你的代碼應該看起來像這樣並且實際上工作:

int atoi2(const char *s) { 
    int i, sum = 0; 
    for (i = 0; isdigit(*s); s++) { 
     sum = (sum * 10) + (*s - '0'); 
     i++; 
    } 
    return sum; 
}