我想从 N 个文本文件中读取(具有相似的结构:几行,每行具有相同的少量单词)并将读取的单词存储在字符串矩阵中,这样每个 (row, col)立场我一句话。
文件的一个简单(两行,每行三个字)样本如下:
line1word1 line1word2 line1word3
line2word1 line2word2 line2word3
单词的分隔符是空格。
我尝试过这段代码:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STRING_LENGTH 1000
#define MAX_TOKS 100
#define DELIMITERS " "
// line parsing utility
int parseString(char* line, char*** argv) {
char* buffer;
int argc;
buffer = (char*) malloc(strlen(line) * sizeof(char));
strcpy(buffer,line);
(*argv) = (char**) malloc(MAX_TOKS * sizeof(char**));
argc = 0;
(*argv)[argc++] = strtok(buffer, DELIMITERS);
while ((((*argv)[argc] = strtok(NULL, DELIMITERS)) != NULL) &&
(argc < MAX_TOKS)) ++argc;
return argc;
}
int main() {
char S[MAX_STRING_LENGTH];
char **A;
int n,i,j,l;
FILE *f;
char file[50];
char ***matrix;
matrix = malloc(MAX_TOKS * sizeof(char**));
//memory allocation for matrix
for (i = 0; i < MAX_TOKS; i++)
{
matrix[i] = malloc(MAX_TOKS * sizeof(char *));
for (j = 0; j < MAX_TOKS; j++)
{
matrix[i][j] = malloc(MAX_TOKS * sizeof(char));
}
}
int NFILE = 10; // number of files to be read
for(i=0;i<NFILE;i++)
{
sprintf(file,"file%d.txt",i);
f = fopen(file,"r");
l=0; // line-in-file index
while(fgets(S,sizeof(S),f)!=NULL) {
n = parseString(S,&A);
for(j=0;j<n;j++) {
matrix[i][l]=A[j];
printf("%s\t%s\n",matrix[i][l],A[j]);
}
l++;
}
fclose(f);
}
free(matrix);
free(A);
return(0);
}
我无法解决的问题是,在检查数组之间的对应关系时(为了确保我正确存储单个单词)使用
printf("%s\t%s\n",matrix[i][l],A[j]);
我发现每行的最后一个单词(并且只有最后一个单词),无论文件编号如何,都没有存储在matrix
. 也就是说,line1word1
and line1words
offile0
正确存储在matrix[0][0][0]
andmatrix[0][0][1]
中,但是字段matrix[0][0][2]
中没有line1word3
,即使A[2]
有!
我在做什么错?有什么建议吗?
非常感谢提前,干杯