C 将文本文件中的字符串存储到二维数组中
我正在使用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
#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可以打印二维阵列,如编辑中所示