gpt4 book ai didi

c - 在读取文本文件之前为二维字符串数组分配空间

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

我正在读取一个大型文本文件,其中包含一个字符串,后跟一个换行符。我使用 fgets 读取每个字符串并将它们存储在二维字符串数组中,并使用 malloc 分配内存。

void read_file (char **dictionary, char * argv[])

{

FILE * file_name;
int i = 0, word_count = 0, c;

file_name = fopen(argv[0], "r");
if (file_name == NULL)
{
printf("Cannot open file");
}
while (fgets(dictionary[i], MAX_WORD_LENGTH, file_name))
{
dictionary[i][strlen(dictionary[i]) - 1] = '\0';
word_count++;
i++;
}
printf("\n%d words scanned in from: %s\n", word_count, argv[0]);
fclose(file_name);
}

char ** AllocateDictionaryMemory (void)

{

int i;

char **p = malloc(MAX_WORDS * sizeof(*p));

for (i = 0; i < MAX_WORDS; i++)
{
p[i] = malloc(MAX_WORD_LENGTH + 1);
}
if (p == NULL)
{
printf("Failed to allocate 2D string array space\n.");
}

return p;

这使用固定值 MAX_WORD_LENGTH (10)。但是,我现在想用非固定大小的单词来完成它,这是通过在给定的文本文件中找到最长的单词来决定的。我还有一个功能可以在字典中找到最长的单词。问题是 malloc 函数需要给它最大字长,而 read_file 函数需要一个字典数组来读入——这两者都发生在我运行查找最长字函数之前。

我想问题是——在为字典分配空间之前,以及在将实际文本文件读入字典之前,如何找到文本文件中最长的单词。

我知道我可以将 max_word_length 设置得大得离谱,但这样就违背了重点 - 我希望在找到最大字长后确定空间的大小。

读取文件 --> 找到最长的单词 --> malloc 空间足够大以容纳最长的单词 --> 将文件读入新空间 是目标。

最佳答案

以下函数遍历文件以计算所有单词的长度并返回最长单词的长度。

int findLongestWord(FILE *fin)
{
int c, i=0, longest= 0
while ((c=fgetc(fin))!=EOF)
{
if (isspace(c)) {
if (i>longest) longest= i;
i= 0;
}
else i++;
}
if (i>longest) longest= i; // suppose last word was longest..
return longest;
}

在再次处理之前不要忘记倒带文件。

关于c - 在读取文本文件之前为二维字符串数组分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757223/

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