C 将文本文件中的字符串存储到二维数组中

C 将文本文件中的字符串存储到二维数组中,c,arrays,string,C,Arrays,String,我正在使用C编写一个项目,对于这个项目,我必须读入一个文本文件,并将每个单词存储到一个数组中。我还必须删除单词上的标点符号,因此我需要使用二维数组来编辑单词。我很难弄清楚如何在二维数组中获取单词。这就是我到目前为止所做的: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1001 #define LINES 81 int main(void) { int s

我正在使用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;
}
#包括
#包括
#包括
#定义最大值1001
#定义第81行
内部主(空){
整数字符串大小;
int i=0;
字符*x[最大值][行];
字符str[MAX];
chary[MAX];
文件*fp;
fp=fopen(“TwoCitiesStory.txt”,“r”);
如果(fp==NULL){
printf(“无法打开文件。\n”);
出口(1);
}
而(!feof(fp)){
对于(i=0;i
  • 使用
    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]);
    
    inti;
    对于(i=0;i下一行

    char *x[MAX][LINES];
    
    声明了一个二维指针数组。您需要的只是一个二维字符数组

    char x[MAX][LINES];
    
    阅读单词的代码可以简化为:

    while( i < MAX && fscanf(fp, "%80s", x[i]) == 1 )
    {
       ++i;
    }
    
    while(i
    是否要从文件中读取一行…因为如果文本文件包含“嗨,我的名字是Bob”,则%s将只读取单词。我需要数组来容纳x[0][]=“嗨”x[1][]=“我的”依此类推。文本文件中的最大字数为1000个,最大字长为80个字符。因此,此代码
    char x[MAX][LINES];
    会遇到什么问题。
    for(i=0;iYou使用的
    feof
    不正确:这不会将数组中的每个单词分开。例如,如果文本文件包含“嗨,我的名字是鲍勃”。我需要数组来容纳x[0][]=“嗨”x[1][]=“我的”“等等。文本文件中的最大字数是1000个字符,最大字长是80个字符。它自己成功运行的代码,但我有点困惑您是如何得出这个答案的。row是最大字数,col是单词本身的长度吗?首先您创建了char x[row][col col];它创建了一个字符数组,然后您创建了buf[300];。但是buf做什么呢?如果我必须在后面打印单词,我应该调用哪个数组?我尝试这样打印:for(I=0;i@beginner_coder可以打印二维阵列,如编辑中所示