《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 ... 
随机推荐
- C语言小练习之学生信息管理系统
			C语言小练习之学生信息管理系统 main.c文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ... 
- AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController
			AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ... 
- vue axios post请求下载文件,后台springmvc完整代码
			注意请求时要设置responseType,不加会中文乱码,被这个坑困扰了大半天... axios post请求: download(index,row){ var ts = ... 
- PHP出现SSL certificate:unable to get local issuer certificate的解决办法
			当本地curl需要访问https时,如果没有配置证书,会出现SSL certificate: unable to get local issuer certificate错误信息. 解决办法: 1.下 ... 
- 常见web漏洞的整理之SQL注入
			SQL注入: 简介: 全称Structured Query Language,即结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言.也被作为关系式数据库管理系统的标准语言. 原理: ... 
- 基于Neo4j的个性化Pagerank算法文章推荐系统实践
			新版的Neo4j图形算法库(algo)中增加了个性化Pagerank的支持,我一直想找个有意思的应用来验证一下此算法效果.最近我看Peter Lofgren的一篇论文<高效个性化Pagerank ... 
- System类的两个静态方法currentTimeMillis 和 arraycopy
			package com.yhqtv.demo02.ThreadPool; import java.util.Arrays; public class Test { public static void ... 
- HTML之前端组成、标签
			详情见:https://www.cnblogs.com/liwenzhou/p/7988087.html https://www.cnblogs.com/zhangguosheng1121/p/109 ... 
- C语言字符数组超细讲解
			看到标题,有不少朋友会想:字符数组不也是数组吗?为什么要单独拿出来讲哩?莫非它是朵奇葩? 哈哈,确实,一起来认识一下这朵数组界的奇葩吧! 一.字符数组的定义.引用.初始化 大家好!我是字符数组,看我的 ... 
- thinkphp--多个id查询
			$feedback_list = $feedback -> where( array("member_id"=>array("in", " ... 
