gpt4 book ai didi

c - C中查找数组的性能

转载 作者:太空宇宙 更新时间:2023-11-04 05:25:49 25 4
gpt4 key购买 nike

我必须遍历包含大约 100M 行的日志文件。我必须为多个日志执行此操作。平均行长度为 110 个字符。

目前我正在遍历可能的匹配项列表。我想知道是否有更好的方法?

char *in_array(char *car) {
// longer list than this...
char *carlist[] =
{
"Avalon",
"Azera",
"Cayenne",
"Civic",
"Corolla",
"Elantra",
"F-150",
"Hilux",
"Lexus LS",
"Rav 4",
"Sienna",
// etc...
};

char *match;
int i;
int n = sizeof(carlist)/sizeof(carlist[0]);

for(i = 0; i < n; i++)
{
match = strstr(car, carlist[i]);
if(match != NULL)
{
return strdup(match);
}
}

return strdup("No match");
}

最佳答案

DFA(确定性有限自动机,复数自动机)可以将字符串与许多模式进行匹配,这比独立地依次测试每个模式要快得多。

解析器生成器擅长自动构建 DFA 表。

缺点是当模式列表发生变化时必须重建 DFA...但是由于您的模式列表当前被硬编码为数组,所以这对您来说应该不是问题。

由于您使用的是 C,flex 将是一个很好的工具。

关于c - C中查找数组的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com