例子如下,是將字符串轉(zhuǎn)換為對應(yīng)數(shù)值的函數(shù)atoi,可以處理可選的前導(dǎo)空白符以及一個(gè)可選的加·(+)或減(-)號。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 回答

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
abcd轉(zhuǎn)換數(shù)值? 你是要做16進(jìn)制的嗎?
一般atoi只是轉(zhuǎn)換10進(jìn)制的 不包括16進(jìn)制
如果你要支持16進(jìn)制 可以自行增加一個(gè)前導(dǎo)符 比較常用的是x
即如果字符串第一個(gè)字符為x 則表示改字符串為16進(jìn)制形式
判斷和你現(xiàn)有的符號判斷類似,處理數(shù)據(jù)的時(shí)候不能用isdigit判斷 而是要加入a-f的判斷
計(jì)算的時(shí)候 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 關(guān)注
- 181 瀏覽
添加回答
舉報(bào)
0/150
提交
取消