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

时间:2015-04-01 03:55:45

标签: c arrays string

我正在使用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;
}

2 个答案:

答案 0 :(得分:1)

  1. 使用fgets()
  2. 阅读整行
  3. 将读取行存储到2D数组
  4. 整个代码看起来像

    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]);
    

    Why feof() is wrong

答案 1 :(得分:1)

以下一行

char *x[MAX][LINES];

声明了一个2D数组指针。你需要的只是一个2D数组字符。

char x[MAX][LINES];

阅读单词的代码可以简化为:

while( i < MAX && fscanf(fp, "%80s", x[i]) == 1 )
{
   ++i;
}