例子如下,是将字符串转换为对应数值的函数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 关注
- 105 浏览
添加回答
举报
0/150
提交
取消