您的位置:首页 > 编程语言 > C语言/C++

练习(2-3)-C语言程序设计

2013-12-27 21:24 239 查看



编写函数htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0·9、a-f、A-F。

下面是本人的解法:很挫

#include <stdlib.h>
#include <stdio.h>

int htoi(char *);

int main()
{
char a[] = "0x10";
char *p = "0xff";
printf("%d\n", htoi(a));
printf("%d\n", htoi(p));

return 0;
}
int htoi(char *s)
{
int i, n;
n = 0;
for (i = 2; s[i] >= '0' && s[i] <='9' || s[i] >= 'a' && s[i] <= 'f'|| s[i] >= 'A' && s[i] <= 'F'; i++){
if (s[i] >= '0' && s[i] <='9')
n = n * 16 + (s[i] -'0');
if (s[i] >= 'a' && s[i] <= 'f')
n = n * 16 + (s[i] - 'a' + 10);
if (s[i] >= 'A' && s[i] <= 'F')
n = n * 16 + (s[i] - 'A' + 10);
}
return n;
}


下面是作者的参考答案:

#define     YES     1
#define     NO      0

/*htoi: convert hexadecimal string s to integer*/
int htoi(char s[])
{
int hexdigit, i, inhex, n;

i = 0;
if (s[i] == 0){
++i;
if (s[i] == 'x' || s[i] == 'X')
++i;
}
n = 0;
inhex = YES;
for ( ; inhex == YES; ++i){
if (s[i] >= '0' && s[i] <= '9')
hexdigit = s[i] - '0';
else if (s[i] >= 'a' && s[i] <= 'f')
hexdigit = s[i] - 'a' + 10;
else if (s[i] >= 'A' && s[i] <= 'F')
hexdigit = s[i] - 'A' + 10;
else
inhex = NO;

if (inhex == YES)
n = 16 * n + hexdigit;
}
return n;
}


简洁 易懂 ,差距还是比较大,继续加油学习!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐