在处理输入文件之前,如何在不知道有多少字符串的情况下创建一个唯一字符串数组?可以有多达200万个字符串,最大长度为50。 我的程序是这样的。这适用于51项,然后覆盖其他数据。如果可能的话,我不知道如何向数组添加元素。
main() {
char *DB_NAMES[51]; // i thought this gave me ptrs to chunks of 51
// but it's 51 pointers!
char *word;
while not eof {
...function to read big string
...function to separate big sting into words
...
processWord(ctr, DB_NAMES, word);
...
}
}
processWord(int ndx, char *array1[], char *word){
...function to find if word already exists...
//if word is new, store in array
array1[ndx]= (char *)malloc(sizeof(51)); // isn't this giving me a char[51]?
strcpy(array1[ndx],word);
...
}
答案 0 :(得分:0)
您可以使用以下逻辑首先获取文件中的单词数,当您获得文件中的单词数时,可以使用单词count初始化数组大小。
#include<stdio.h>
#define FILE_READ "file.txt"
int main()
{
FILE * filp;
int count = 1;
char c;
filp = fopen(FILE_READ, "r");
if(filp == NULL)
printf("file not found\n");
while((c = fgetc(filp)) != EOF) {
if(c == ' ')
count++;
}
printf("worrds = %d\n", count);
return 0;
}
此致 yanivx
答案 1 :(得分:0)
最好不要使用固定的字符串长度;节省内存空间。
char **DB_NAMES = 0; // pointer to first char * ("string") in array; initially 0
通过引用传递指针,以便可以更改它。此外,如果存储了新单词,您将需要新的ctr
值。
ctr = processWord(ctr, &DB_NAMES, word);
相应地更改功能processWord
。
int processWord(int ndx, char ***array1a, char *word)
{ char **array1 = *array1a;
...function to find if word already exists...
// if word is new, store in array
{
array1 = realloc(array1, (ndx+1)*sizeof*array1); // one more string
if (!array1) exit(1); // out of memory
array1[ndx++] = strdup(word); // store word's copy
*array1a = array1; // return new array
}
return ndx; // return count
}