苟哥的笔记本
首页
文章归档
关于
文章归档
关于
首页
编程
正文
C程序设计语言第2版习题2-3
苟哥
2019-06-06 AM
1229℃
0条
###问题描述 编写函数htoi(s), 把由十六进制数字组成的字符串(包含可选的前缀0X和0x),转化为与之等价的整数值, 字符串中包含的字符可以是0 - 9,A - F,a - f。 ###问题拆分 - 主函数main - 接收用户输入字符串函数 get_line (注意不能按照书本上的getline,因为次函数已在stdio.h 中定义了) - 将十六进制字符串转化成十进制整数的函数 htoi (这是核心) ###代码实现 ```c #include
#define LINE 1000 //每行接收的最大字符数 #define DEC 10 //数字10 #define HEX 16 //数字16 int get_line(char s[]); int htoi(char s[]); int main() { char line[LINE]; int len; int dec; while(len = get_line(line) > 0){ printf("Hex is: %s \n", line); dec = htoi(line); printf("Dec is: %d \n", dec); } return 0; } //接收每次输入的字符,并返回长度 int get_line(char s[]) { int i; char c; for(i = 0; i < LINE - 1 && (c = getchar()) != EOF && c != '\n'; i++){ s[i] = c; } s[i] = '\0'; return i; } /* *十六进制字符串转为十进制整数, *算法描述: 例如输入字符串 0x32, 那么result = 3 * 16^1 + 2 * 16 ^ 0 */ int htoi(char s[]) { int dec, len, i, n, j, ji, k; len = 0; dec = 0; while(s[len] != '\0'){ len++; //获取字符串长度 } //return len; j = 0; for(i = len - 1; i >= 2; i--){ //处理不同字符串 if(s[i] >= '0' && s[i] <= '9'){ n = s[i] - '0'; }else if(s[i] >= 'a' && s[i] <= 'f'){ n = s[i] - 'a' + DEC; }else if(s[i] >= 'A' && s[i] <= 'F'){ n = s[i] - 'A' + DEC; } ji = 1; if(j == 0){ ji = 1; }else{ k = j; while(k > 0){ ji = ji * HEX; k--; } } j++; dec = dec + ji * n; } return dec; } ``` [1]: http://images.kuryun.com/blog/typecho/0.jpg
标签:
C程序设计语言
,
算法
,
习题2-3
,
C语言
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
http://www.i366211.com/archives/15/
上一篇
没有了
下一篇
C程序设计语言第2版习题2-4
取消回复
评论啦~
提交评论
栏目分类
软件安装
10
开发工具
8
算法
2
测试
1
架构
3
填坑记
2
开源
6
科普
6
私域
2
读书笔记
4
编程
48
运营
3
管理
1
标签云
算法
C程序设计语言
C语言
Java
mysql
PHP
ffmpeg
golang
VueJs
脚手架
VueJs实战项目
Intellij IDEA
Centos7
Hyperf
抖音运营
杰克韦尔奇
跌荡一百年
生成海量测试数据
企业管理
习题2-3
习题2-4
习题2-6
异常分类
File
习题2-7
习题2-8
习题2-9
习题3-3
习题3-4
习题3-5
友情链接
申请
SaaS引擎
机器人框架
京东捡漏