为了账号安全,请及时绑定邮箱和手机立即绑定

如下函数写一个程序将字符串a[10]={'a','b','c','d'}转换为对应数值并打印出来?

如下函数写一个程序将字符串a[10]={'a','b','c','d'}转换为对应数值并打印出来?

C C++
萧十郎 2022-09-17 15:11:57

例子如下,是将字符串转换为对应数值的函数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贡献1536条经验 获得超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;   }


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信