设计能读取档案内容的程式问题

Home Home
引用 | 编辑 dfgkopeeed
2011-12-05 09:12
楼主
推文 x0
我现在假设我文件档(档名01.txt)的内容有38.117.232.0/24    32.112.45.0/24   1.53.48.0/20  这三个,我已经做出能读取档 ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 Freelife
2011-12-05 09:48
1楼
  
(1)先用"空白"字元,把3个子字串分离出来。
(2)每一个子字串,再用'/'做切割,就得到你想的结果。

献花 x0
引用 | 编辑 dfgkopeeed
2011-12-05 10:05
2楼
  
我就是用空白换行的, 不过我现在的问题就是我要用我那个尾数(有24,28......)来分类输出,我那三个只是其中几个而已也就是我最后想输出(以我那三个为例子) 



献花 x0
引用 | 编辑 ebolaman
2011-12-05 13:05
3楼
  
读取进来的方法有很多种,第一个要作的是用 char* 阵列来储存三个 字串

arrS[0] = "38.117.232.0/24"
arrS[1] = "32.112.45.0/24"
arrS[2] = "1.53.48.0/20"

可以用 scanf 用 %s 方式一次读一串,或是全部读进来后,用 strtok 依照空白字元 切割



接下来要做分类的动作,作分类的动作之前,必须先得知每个 arrS 斜线后面的数字是多少

也是可以用 strtok 来作切割,再来用 atoi 转换成数字

或是用 strrchr 来搜寻斜线,同样动作用 atoi 转换成数字



接下来分类我提供一个很简单的方法 :

用另外一个阵列 arrNum[] 来记录斜线后的数字,对应到同一 Index 的 arrS

只要将 arrNum 来排序,排序过程中任何两个 Index 的数字 swap 时候,arrS 的字串也要跟着 swap


arrS[0] = "38.117.232.0/24"
arrS[1] = "32.112.45.0/24"
arrS[2] = "1.53.48.0/20"


arrNum[0] = 24
arrNum[1] = 24
arrNum[2] = 20


排序完后资料会像这样 :

arrS[0] = "1.53.48.0/20"
arrS[1] = "38.117.232.0/24"
arrS[2] = "32.112.45.0/24"


arrNum[0] = 20
arrNum[1] = 24
arrNum[2] = 24


再把 arrS 用回圈从 0 ~ 2 依序印出即可




这是一个我想出来的几个简单的方法,要更有效率可以用 List, Tree 等资料结构来作,但是稍显复杂

献花 x0
引用 | 编辑 dfgkopeeed
2011-12-05 18:20
4楼
  
谢谢您的回答,我现在的困境是在我很有很多笔资料(几千笔),我在想这样的话要怎么去做处理

献花 x0
引用 | 编辑 ebolaman
2011-12-05 23:56
5楼
  
几千笔的话,可以考虑 动态分配 来储存资料

在 C 中就是用 malloc, calloc 的语法来动态分配记忆体,虽然执行速度会比 用阵列来的慢

好处是比较没有长度的顾虑


(进阶的作法是用 Array 搭配 动态分配,速度可以提升一点)



1000 多笔资料用 Quick sort 的排序法来排序资料也是很快的

实作一次就大概知道了,我猜应该也是 咻一下就显示出来了

献花 x0