如果我是正確的,任務是收集一系列文件中的每一行上存在的數字,並帶有一些擴展名。
迭代文件可以用多種方式完成,可以匹配文件擴展名。將未知數量的元素添加到數組也是一樣。
這是基於我對問題的理解的建議解決方案:
#include <stdio.h>
#include <stdlib.h>
#include <glob.h>
int main(int argc, char *argv[])
{
char pattern[] = "/tmp/*.txt";
glob_t globbuf;
FILE *file;
int i, num, n = 0, max = 10;
int *numbers = malloc(sizeof(int) * max);
glob(pattern, 0, NULL, &globbuf);
for (i = 0; i < globbuf.gl_pathc; i++)
{
if ((file = fopen(globbuf.gl_pathv[i], "r")) != NULL)
{
while (fscanf(file, "%d\n", &num) == 1)
{
numbers[n] = num;
n++;
if (n >= max)
{
max = max * 2;
numbers = realloc(numbers, sizeof(int) * max);
}
}
fclose(file);
}
}
globfree(&globbuf);
printf("Collected numbers:\n");
for (i = 0; i < n; i++)
{
printf("%d\n", numbers[i]);
}
free(numbers);
return 0;
}
文件位於和匹配在單個操作正確的擴展名,使用glob
功能。數字收集在一個動態分配的數組中,其大小加倍,每次用盡空間時使用realloc
。
你必須在C中做到這一點嗎? – 2011-03-12 18:43:11
我不太明白這個問題。你正在掃描文件的目錄層次結構,還是正在掃描文件中的文本?如果它是先前的,那麼我建議你看一下'glob'函數('man 3 glob')。如果後者,你已經在正確的軌道上(並且可能希望查看其中的''strstr''功能)。進一步闡述你真正想做什麼可能會產生更準確的答案。 – gamen 2011-03-12 19:08:07
在程序員時間,執行時間,執行空間等方面效率最高? 「最高效」需要更多的澄清。 – mpez0 2011-03-13 01:06:35