`
cloudtech
  • 浏览: 4615330 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

C语言之IP排序

 
阅读更多

看到一个比较初级的问题,4个字段的ip,如何排序?

分析:
排序是按每个字段的整数值进行,而整个ip地址是字符串型,故需要逐个字段读取。

注意到每个字段0~255,可以用一个字节表示,而要比较大小,故用unsigned char型。

读取后,最自然的想法是逐个字段比较,依次比较4个字段,这个可以分别对每个字段调用排序。

想到基数排序的原理,不妨以256作为基数实施基数排序。

想到这里,既然有这么个特殊数字256,我们的字段都是模256的余数,可以将所有字段按照所在位置乘以256的对应次幂;这样得到一个整数,只需对该整数排序即可。这个同进制的原理,即256进制,于是,同进制比较大小一样,结果的排序即为索求排序,不过这个要用指针或者下标等方法将两者对应。

想到这里,记得c语言提供了union的机制,不妨一用。定义
union
{
unsigned char one_ip[4];
unsigned long four_ip;
}ip;
这样,可以以ip.one_ip读入4个子段,再以 ip.four_ip 进行比较,与上面的类似,但少了求值这一步。简洁了不少。不过,必须注意读入的字段的顺序,必须高字段在高位,不然比较的结果没意义。

分享到:
评论

相关推荐

    c语言实战105例源码

    关于C语言一些简单的实例,里面有些思想值得借鉴 1 一个价值“三天”的BUG  2 灵活使用递增(递减)操作符  3 算术运算符计算器  4 逻辑运算符计算器 5 IP地址解析  6 用if…else语句解决奖金发放问题...

    c语言经典案例

    实例040 IP地址形式输出 51 实例041 特殊的完全平方数 52 实例042 一数三平方 54 实例043 求等差数列 55 实例044 亲密数 56 实例045 自守数 57 第5章 运算符与表达式 60 实例046 求二元一次不定方程 61 实例047 可逆...

    C语言实战105例源码

    (无需积分)C语言实战105例源码 其他的都是要分值的,转来的不要积分 第1部分 基础篇 实例1 一个价值“三天”的BUG 2 实例2 灵活使用递增(递减)操作符 5 实例3 算术运算符计算器 7 实例4 逻辑运算符...

    《C语言实战105例》

    实例16 常用的几种排序方法 46 实例17 广度优先搜索及深度优先搜索 53 实例18 实现基本的串操作 59 实例19 计算各点到源点的最短距离 62 实例20 储油问题 65 实例21 中奖彩球问题 67 实例22 0-1背包...

    《你必须知道的495个C语言问题》

    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...

    EXCEL辅助IP列说明

    EXCEL辅助IP地址列,通过excel进行IP地址的排列

    你必须知道的495个C语言问题

    1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型...

    你必须知道的495个C语言问题(PDF)

    难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3 1.7 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返 回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义...

    C语言实战105例 含105个源代码

    实例16 常用的几种排序方法 46 实例17 广度优先搜索及深度优先搜索 53 实例18 实现基本的串操作 59 实例19 计算各点到源点的最短距离 62 实例20 储油问题 65 实例21 中奖彩球问题 67 实例22 0-1背包...

    C语言FAQ 常见问题列表

    难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...

    C语言教程-UDP传输系统实现,启动步骤和源码分享与教程解析

    UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的...

    c语言如何对海量数据进行处理

    要求你按照query的频度排序。 3. 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。 4. 海量日志数据,提取出某日访问百度次数最多的那个IP。(利用...

    宋劲彬的嵌入式C语言一站式编程

    C语言入门 1. 程序的基本概念 1. 程序和编程语言 2. 自然语言和形式语言 3. 程序的调试 4. 第一个程序 2. 常量、变量和表达式 1. 继续Hello World 2. 常量 3. 变量 4. 赋值 5. 表达式 6. 字符类型与字符编码 3. ...

    JavaScript实现的九种排序算法

    大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍。 下面话不多说了,来一起看看详细的介绍吧 一、代码汇总(一) 1、冒泡排序 2、改进版冒泡排序 3、选择排序 4、直接插入排序...

Global site tag (gtag.js) - Google Analytics