我目前有这种循环
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 中进行字符串比较?
最佳答案
strcmp
通常由所有供应商优化。但是,如果您对此不满意,可以尝试:
- 查找 Burst Tries
- 使用后缀树进行快速字符串比较——参见 this文章
- 根据应用程序中字符串的大小,您可以编写自定义字符串比较器。例如:GNU
libc
曾经对小字符串进行过这种优化,他们将小于五个字节的字符串作为整数进行测试。 MScl
也对小字符串进行了一些优化(一定要查一下)。
但更重要的是确保 strcmp
是您的真正瓶颈。
关于c - C中的快速字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722410/