【发布时间】:2012-05-23 14:48:02
【问题描述】:
我目前有这种循环
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 中进行字符串比较?
【问题讨论】:
-
@KingsIndian:不,因为这里真正的问题不是“如何比较两个字符串”,而是“如何测试一个字符串是否包含在大量字符串中”。
-
只有当字符串的大小相等时,才可以执行 if((buffer[0] == line[0]) && (buffer[1] == line[1]) && ...)。这比调用 strcmp() 更快。
-
我刚刚在 wakkerbot 上运行了一个配置文件:它使用 200 毫秒在 500K 的已知单词词典中进行 2M 次查找。在匹配的哈希表条目中包含最终的 strcmp()。