我有这个程序需要对数组中的字符串进行一些比较。首先想到的就是使用strcmp
来检查数组中的两个字符串是否相同。现在考虑您只需要比较指向字符串的指针的选项。这将涉及一些准备工作,将每个元素实际上相同地映射到内存中的相同位置。
我已经完成了所有这些,通过准备strcmp
,现在准备strstr
(我认为更快)。
但是因为我需要检查每个字符串以将它们映射到它们的第一次出现,所以我得到了非常长的准备时间。我应该提一下,这个数组是几MB大。
以下是我想要做的一个例子:
[0x0: "I", 0x1: "am", 0x2: "done", 0x3: "here.", 0x4: "I", 0x5: "have", 0x6: "done", 0x7: "everything!"]
[0x10: 0x0, 0x11: 0x1, 0x12: 0x2, 0x13: 0x3, »0x14: 0x0«, 0x15: 0x5, »0x16: 0x2«, 0x17: 0x07]
现在问题是:还有另一种方法可以比我现在更快地进行这种映射吗?
答案 0 :(得分:1)
如果仅仅是为了查看是否存在重复项...您可以在字符串数组上运行qsort()
,如果您的sort函数找到重复项,您可以提前保释。或者,如果您需要删除重复项,那么让排序完成并从列表底部线性迭代,并在找到它们时将它们拉出(因为所有重复项将彼此相邻)。
如果字符串相对不同,strcmp()
实际上只需要在失败的匹配之前检查第一批字符。所以它可能没有你想象的那么糟糕。
当然,执行此操作的难易程度取决于字符串实际存储在内存中的方式。
更新:
好的,根据您的更新...... Matt建议的哈希表可能效果最好:
我认为这应该会给你相对不错的表现,总体而言。