我正在使用C进行项目,对于项目,我必须在文本文件中读取并将每个单词存储到数组中。我还必须删除单词的标点符号,所以我需要使用二维数组来编辑单词。我无法弄清楚如何在二维数组中得到它自己的单词。这是我到目前为止所做的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1001
#define LINES 81
int main(void) {
int stringSize;
int i =0;
char *x[MAX][LINES];
char str[MAX];
char y[MAX];
FILE *fp;
fp = fopen("TwoCitiesStory.txt","r");
if(fp == NULL) {
printf("Cannot open file.\n");
exit(1);
}
while(!feof(fp)) {
for(i=0;i<MAX;i++){
fscanf(fp,"%s",x[i][LINES]);
}
}
return 0;
}
答案 0 :(得分:1)
fgets()
整个代码看起来像
char x[row][col];
char buf[300];
int i=0,j=0;
memset(x,0,sizeof(x));
while(fgets(buf,sizeof(buf),fp))
{
size_t n = strlen(buf);
if(n>0 && buf[n-1] == '\n')
buf[n-1] = '\0';
if(i>= row && n> col)
break;
strcpy(x[i],buf);
i++;
}
<强>编辑:强>
如果您需要在数组中单独使用每个单词。
buf
用于阅读整行。
strtok()
用于将行划分为以空格作为分隔符的单词。
然后将每个单词存储在每一行中。
size_t n;
while(fgets(buf,sizeof(buf),fp))
{
char *p = strtok(buf," ");
while( p != NULL)
{
n = strlen(p);
if(i>= row && n> col)
break;
strcpy(x[i],p);
i++;
p = strtok(NULL," ");
}
}
如果要打印出数组,请转到
int i;
for(i=0;i<row;i++)
printf("%s\n",x[i]);
答案 1 :(得分:1)
以下一行
char *x[MAX][LINES];
声明了一个2D数组指针。你需要的只是一个2D数组字符。
char x[MAX][LINES];
阅读单词的代码可以简化为:
while( i < MAX && fscanf(fp, "%80s", x[i]) == 1 )
{
++i;
}