例子如下,是將字符串轉換為對應數值的函數atoi,可以處理可選的前導空白符以及一個可選的加·(+)或減(-)號。int atoi(char s[]){int i, n, sign;for (i = 0; isspace(s[i]); i++) /* skip white space */;sign = (s[i] == '-') ? -1 : 1;if (s[i] == '+' || s[i] == '-') /* skip sign */i++;for (n = 0; isdigit(s[i]); i++)n = 10 * n + (s[i] - '0');return sign * n;}
1 回答

牧羊人nacy
TA貢獻1862條經驗 獲得超7個贊
abcd轉換數值? 你是要做16進制的嗎?
一般atoi只是轉換10進制的 不包括16進制
如果你要支持16進制 可以自行增加一個前導符 比較常用的是x
即如果字符串第一個字符為x 則表示改字符串為16進制形式
判斷和你現有的符號判斷類似,處理數據的時候不能用isdigit判斷 而是要加入a-f的判斷
計算的時候 10*n改成16*n
簡單的例子
int atoi ( char s[]) { int i, n, sign; for (i = 0; isspace (s[i]); i++) /* skip white space */ ; if (s[i] == 'x' ) /*hex*/ { i ++; for (n = 0; isdigit (s[i]) || (s[i]>= 'a' && s[i] <= 'f' ); i++) { if ( isdigit (s[i])) n = 16 * n + (s[i] - '0' ); else n = 16 * n + (s[i] - 'a' )+10; } return n; } sign = (s[i] == '-' ) ? -1 : 1; if (s[i] == '+' || s[i] == '-' ) /* skip sign */ i++; for (n = 0; isdigit (s[i]); i++) n = 10 * n + (s[i] - '0' ); return sign * n; } |
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報
0/150
提交
取消