在C中,我想处理一个包含10个 8 16位字母数字字符串的文件,并确定每个字符串是否在文件中是唯一的。我怎么能这样做?
答案 0 :(得分:2)
正如其他人所说,最简单的方法是简单地加载整个文件并使用qsort
之类的方法对其进行排序。
如果你不能一次加载到内存中,另一种选择是在几次传递中加载数据。在第一次传递时,请阅读该文件,并仅加载以A
开头的行。对它们进行排序并找到独特的线条。对于下一个传递,加载所有以B
开头的行,排序并查找唯一的行。对一行开头的每个字母数字字符重复此过程。使用这种技术,您只需要一次将一小部分文件加载到内存中,它不应该导致您对任何行进行错误分类。
答案 1 :(得分:1)
鉴于您正在谈论~16兆字节的数据,显而易见的方法是将数据加载到哈希表(或该顺序中的某些内容)并计算每个字符串的出现次数。
我无法想象在C中这样做 - 大多数其他语言将提供合理的数据结构(某种地图),使工作变得更加容易。
答案 2 :(得分:1)
对多个文件执行存储桶排序(哈希功能),每个存储桶一个文件。然后处理每个存储桶的文件以确定所有字符串在存储桶中是否唯一。
答案 3 :(得分:0)
您需要对文件进行排序。
只需将其加载到单个内存块中,从内存块上的C运行时库运行qsort
,最后在所有字符串上顺序运行,以检查两个相同的连续字符串。
答案 4 :(得分:0)
使用具有set / map功能的库,例如见link text