gpt4 book ai didi

arrays - C 将大文本文件加载到数组中

转载 作者:行者123 更新时间:2023-11-30 15:28:00 25 4
gpt4 key购买 nike

我有点被困在这里。

我需要将大约 200 万个固定长度的字符串加载到一个数组中,这些字符串位于一个文本文件中,每个字符串占一行。字符串为十六进制,长度为 40 个字符。

在 ansi c 中实现此目的的最佳方法是什么?

查找速度很重要。

加载字符串后,我必须在整个数组中搜索循环生成的匹配项。

我有两个文件,比如说一个大文件和一个巨大文件,都包含十六进制值(哈希),我用这段代码循环遍历巨大文件。

....
FILE *file;
if ( (file = fopen(filenamein, "r") ) == 0 )
{
fprintf(stderr, "%s: failed to open file %s\n", argv[0], filenamein);
exit(1);
}
while ( fgets(keyword, sizeof(keyword), file) != NULL )
{
if ( ( pos = strchr(keyword, '\n') ) != NULL )
*pos = '\0';
....
}
....

在需要在大文件中查找关键字之后,查找时间是一个关键因素。据我目前所知,该文件对于堆栈来说太大了。

最佳答案

根据您的具体需求,可能有一种方法可以在不将所有内容加载到内存中的情况下执行此操作。您没有提供足够的信息来走这条路。

但是,假设您要将所有内容加载到内存中,我可能会尝试将这些行转换为二进制。如果它们包含十六进制数字,那么它们可能会转换为整数或长整数,或者可能是整数数组。整数将使用更少的内存,并且可以更快地比较以实现更快的搜索。

另一种可能有意义的方法是对结果整数进行排序。即使您决定存储字符串,对它们进行排序也可能有意义。可以使用 binary search algorithm 搜索已排序的项目,这将比暴力搜索快很多很多倍。

请注意,排序需要一些时间。因此,只有当您计划加载数据一次然后快速搜索多次时,这种方法才有意义。

关于arrays - C 将大文本文件加载到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765009/

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