《C程序设计语言》 练习2-3
问题描述
练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值。字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。
Write the function htoi(s)
, which converts a string of hexadecimal digits (including an optional 0x
or 0X)
into its equivalent integer value. The allowable digits are 0
through 9,
a
through f,
and A
through F
.
解题思路
1.就是输入十六进制,输出十进制
2.首先写一个函数,把输入读入到一个数组中,我这里用我自己写的getlines实现,你也可以用for+scanf
3.要判断输入的是否是十六进制,字符串只能是0~9、a~f、A~F
4.转换公式:n = n * 16 + result;(后面详细接受这个公式什么意思,怎么推到来的)
代码如下
#include<stdio.h>
#define MAXLEN 1024
#define YES 1//是十六进制
#define NO 0//不是十六进制 int htoi(char array[]);//进制转换函数
int getlines(char array[],int maxlen);//字符串读取函数 int main()
{
int len;//字符串长度
int ten_number;//十进制数
char array[MAXLEN];
while ((len = getlines(array,MAXLEN)) > )
{
ten_number = htoi(array);
printf("%d", ten_number);
putchar('\n');
}
return ;
} int getlines(char array[],int maxlen)
{
int c,i;
for (i = ; i < maxlen- && (c = getchar())!=EOF && c!= '\n'; i++)
{
array[i] = c;
}
if (c=='\n')
{
array[i] = c;
i++;
}
array[i] = '\0';
return i;
} int htoi(char array[])
{
int i,n;
int result=;
int state = YES;//判断是否是十六进制
i = ;
if (array[i] == '')
{
i++;
if (array[i]=='x' || array[i]=='X')
{
i++;
}
}
n = ;
for ( ; state==YES; i++)
{
if (array[i] >= '' && array[i] <= '')
{
result = array[i] - '';
}else if (array[i] >= 'A' && array[i] <= 'F')
{
result = array[i] - 'A' + ;
}else if (array[i] >= 'a' && array[i] <= 'f')
{
result = array[i] - 'a' + ;
}else
{
state = NO;
}
if(state== YES)
{
n = n* + result;
}
}
return n;
OK,我们现在讲一下解题步骤中第四步那个公式的来源:
如果你去百度或谷歌十六进制转换十进制,告诉你的方法都是从十六进制的最右端开始,乘以16的几次方一类的,这个方法适用于人,但是如果用C来实现,显得有点麻烦了,所以我才去了从高位开始转换,就是从最左端
我举个十进制的例子,大家就会豁然开朗了
比如有一个字符串‘2564’,他是十进制
它等于什么?
我们有那个公式来展开2564的话就是这样:
2 * 10 + 5 = 25
25 * 10 + 6 = 256
256 * 10 + 4 = 2564
因为是十进制所以我们乘以10,十六进制我们乘以16
《C程序设计语言》 练习2-3的更多相关文章
- 操作系统和程序设计语言的API使用的字符编码分析
1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...
- python程序设计语言笔记 第一部分 程序设计基础
1.1.1中央处理器(CPU) cpu是计算机的大脑,它从内存中获取指令然后执行这些指令,CPU通常由控制单元和逻辑单元组成. 控制单元用来控制和协调除cpu之外的其他组件的动作. 算数单元用来完成数 ...
- 扩展《C程序设计语言》练习2-3程序通用性
最近开始自学C语言,在看K&R的<C程序设计语言>.练习2-3要求写一个函数,将输入的十六进制数字字符串转换成与之等价的整数值,配套答案没有扩展程序的通用性,所以我就稍微改造改造. ...
- 清风注解-Swift程序设计语言:Point11~15
目录索引 清风注解-Swift程序设计语言 Point 11. 数值型字面量 代码事例: let decimalInteger = // 十进制的17 let binaryInteger = 0b10 ...
- 清风注解-Swift程序设计语言:Point6~10
目录索引 清风注解-Swift程序设计语言 Point 6. 输出常量和变量 代码事例: // 输出的内容会在最后换行 println("hello, world") // 输出的 ...
- 清风注解-Swift程序设计语言:Point1~5
目录索引 清风注解-Swift程序设计语言 Point 1. Swift 风格的"Hello, world" 代码事例: println("Hello, world&qu ...
- 清风注解-Swift程序设计语言
前言 Apple 发布了全新的 Swift 程序设计语言,用来开发 iOS 和 OS X 平台的应用程序.其目的不言而喻:就是为了给老迈的 Objective-C 一个合适接班人!因此,不难预见,未来 ...
- C程序设计语言(第二版)习题:第一章
第一章虽然感觉不像是个习题.但是我还是认真去做,去想,仅此而已! 练习 1-1 Run the "hello, world" program on your system. Exp ...
- Oberon程序设计语言简介
Oberon奥伯龙是一种通用编程语言,也是一种同名操作系统(由Oberon语言开发,且参考过贝尔实验室的新一代网络操作系统Plan9),是由原Pascal程序设计语言的发明者Niklaus Wirth ...
- awk程序设计语言之-awk基础
awk程序设计语言之-awk基础 http://man.linuxde.net/ 常用工具命令之awk命令 awk是一种编程语言,用于在Linux/Unix下对文本和数据处理.数据可以来自标准输入(s ...
随机推荐
- GNU的make命令、makefile编写
makefile简介 makefile可实现工程的自动化编译,只需一个make命令即可一键完成.makefile定义了一些规则,指定哪些文件需要先编译.后编译.重新编译等. 一般的C或者C++程序,都 ...
- openssl进行RSA加解密(C++)
密钥对根据RSA的加密机制(自行查找RSA工作原理),通常可以私钥加密-公钥解密(多用于签名),公钥加密-私钥解密(多用于数据传输加密),私钥可以生成公钥. 密钥对生成生成私钥,长度为2048,默认格 ...
- shiro:自定义remle(二)
SpringMVC+SpringMVC+Mybatis项目 1:导入相关依赖 <dependencies> <!--测试依赖--> <dependency> < ...
- tensorflow1.0 变量加法
import tensorflow as tf state = tf.Variable(0,name='counter') print(state.name) one = tf.constant(1) ...
- 2019-2020-1 20199326《Linux内核原理与分析》第八周作业
可执行程序工作原理## 编译链接的过程### 示例程序hello.c #include<stdio.h> void main() { printf("Hello world\n& ...
- 【Inno Setup】Pascal 脚本 ---- 事件函数
转载 事件函数 Inno Setup支持以下函数和过程. 1. [安装初始化]该函数在安装程序初始化时调用,返回False 将中断安装,True则继续安装,测试代码如下: function Initi ...
- [Qt] Release模式下产生调试信息
分两步,设置Qt配置文件,设置VS. https://blog.csdn.net/itas109/article/details/83652387 F:\Qt\Qt5.7.1\5.7\msvc2015 ...
- QT bug ig9icd64.dll
QT bug ig9icd64.dll bugintel ig9icd64.dll 处有未经处理的异常 遇到了一个 奇奇怪怪的bug, 一般的QT程序中 在main.cpp 中初始化一个窗口进行显示后 ...
- Shutdown SpringBoot App
文章目录 Shutdown Endpoint close Application Context 退出SpringApplication 从外部程序kill App Shutdown SpringBo ...
- 计算3的n次幂htm代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...