练习(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; }
简洁 易懂 ,差距还是比较大,继续加油学习!!
相关文章推荐
- 第7周 C语言程序设计(新2版) 练习1-18 删除空格制表符 (程序不能正确运行)
- 《C语言程序设计(第二版新版)》课后练习
- C语言程序设计 练习题参考答案 第六章 (1) 结构体 综合练习
- 第7周 C语言程序设计(新2版) 练习1-19 颠倒字符串中的字符
- C语言程序设计(第二版),练习2-4&&练习2-5&&练习2-9练习2-10
- 第7周 C语言程序设计(新2版) 练习1-20 制表符换成适当数目空格
- 第7周 C语言程序设计(新2版) 练习9/10 解释原理与大写变小写
- 中国大学MOOC | C语言程序设计入门 第8周编程练习 翁恺
- 第7周 C语言程序设计(新2版) 练习1-21 空格串替换为最小数目的空格和制表符
- C语言程序设计---练习
- C语言程序设计练习2(窗口服务指示系统3.5 )
- 第7周 C语言程序设计(新2版) 练习1-13 打印输入单词长度的直方图(水平与垂直)
- 第7周 C语言程序设计(新2版) 练习2-1 确定各种类型变量的取值范围
- 第7周 C语言程序设计(新2版) 练习1-8 统计空格、制表、换行数程序
- 第7周 C语言程序设计(新2版) 练习1-12 每行一个单词打印输入
- 第7周 C语言程序设计(新2版) 练习1-22 在第n列将较长输入行折短
- 第7周 C语言程序设计(新2版) 练习2-2 不用&&或||,写一个等价的for循环的程序
- 浙大版《C语言程序设计(第3版)》题目集(函数题)练习5-1
- 第7周 C语言程序设计(新2版) 练习1-7 打印一个EOF值
- 第7周 C语言程序设计(新2版) 练习1-14 打印输出各个字符出现频度的直方图(输出结果有问题)