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

如下函数写一个程序将字符串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贡献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;   }


查看完整回答
反对 回复 2022-09-21
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

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