【发布时间】:2013-03-15 10:43:13
【问题描述】:
我想从 N 个文本文件中读取(具有相似的结构:几行,每行具有相同的少量单词)并将读取的单词存储在字符串矩阵中,这样每个(行, 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 中。也就是说file0中的line1word1和line1words正确存储在matrix[0][0][0]和matrix[0][0][1]中,但是在matrix[0][0][2]字段中没有line1word3,即使A[2]有!
我做错了什么?有什么建议吗?
提前非常感谢, 干杯
【问题讨论】: