C - 将文字中的单词写入数组

时间:2012-12-15 14:08:12

标签: c

我有txt文件,它有很多单词的行。我需要将它们全部写入数组。我查看了许多使用fscanf的例子,但是我无法理解它是如何工作的,因此我也无法在我的程序中使用它。所以问题是:如何创建一个可以包含所有单词的数组,或者我应该创建类似这样的东西[999999]而不用担心它。如何将单词写入该数组,不包括“,”,“。”,“?”等等?还有一个问题,我如何衡量单词的大小(它有多少个字符)?

对不起来的问题表示抱歉,感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

未经测试的样本。您应该阅读这些功能。为了确保你这样做,我故意不查看参数的顺序,因为我通常应该猜测一些调用错误。

/* Untested Sample of "What it kinda should maybe look like" */
char buf[BUFSIZ];
fgets(stdin,buf); /*read a line*/
int i;
char *p;
for (p=buf,i=0; p+=strspn(p," .,"); i++) /*count delimiters*/; 
char **words;
words = malloc(i+1 * sizeof(char *));
for (i=0, words[0]=strdup(p=strtok(buf," .,"); words[++i]=strdup(p=strtok(NULL," .,"));) /**/;
words[++i]=NULL;

BUFSIZ应该为您提供一个非常大的缓冲区(足够用于任何合理的文本文件)。扫描缓冲区并计算分隔符,以便对我们将找到的最大字数进行很好的猜测。分配一个char指针数组。使用strdup的一系列调用的返回值的strtok个副本填充数组。对strtok的第一次调用将字符串作为第一个参数传递。之后的调用将NULL作为第一个参数传递,这意味着“继续使用相同的字符串”。我也不确定第二次循环终止。将其视为伪代码。 :)

编辑:如果您在字符串中输入了单词,strlen将为您提供长度(不包括终止的空字节)。