C语言中快速字符串比较

11

我目前有以下这个循环

while(1)
{
    generate_string(&buffer);

    for(int i = 0; i < filelines; i++)
    {
        if(strcmp(buffer,line[i]) == 0)
        {
           /*  do something  */
        }
    }
}

我有一个包含数百万个字符串的文件(希望很快就能减半),所有这些字符串的数量都存储在filelines中。

line[i]基本上是存储字符串本身的地方。

目前,由于需要比较这些数百万个字符串,每秒大约执行generate_string(&buffer);函数约42次。 有没有更快的C语言字符串比较方法?


1
@KingsIndian:不是的,因为这里真正的问题不是“如何比较两个字符串”,而是“如何测试一个字符串是否包含在大量字符串集合中”。 - Steve Jessop
只有当字符串的大小相等时,您才能执行if((buffer[0] == line[0]) && (buffer[1] == line[1]) && ...)。这比调用strcmp()更快。 - André A. G. Scotá
我刚刚在wakkerbot上运行了一个分析报告:它用200毫秒在一个已知单词500K字典中进行2M次查找。这包括在匹配哈希表条目时使用的最终strcmp()函数。 - wildplasser
11个回答

0

在这种情况下,您可能可以通过二进制比较来解决问题,因为您的程序实际上并没有进行排序,而是进行相等性比较。

如果提前确定长度(当然,它们足够不同),您还可以提高比较速度。当长度不匹配时,“做某事”将不会发生。

当然,哈希也是另一个考虑因素,具体取决于您读取哈希值的次数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接