我想将一个lesson.txt文件拆分为令牌。这个文件有一些人和这些人的课程。我该怎么办?
有我的课程.txt文件:
George Adam :Math,Science,Germany
Elizabeth McCurry :Music,Math,History
Tom Hans :Science,Music
首先,我想分成":"。我想将名称存储在数组中。其次,我想分成","这些课程我想存储一个不同的数组。我怎么能这样?
我的代码如下:
char names[100] , *token, *lecture;
file=fopen("C:\\lessons.txt","r");
while(!feof(file))
{
fgets(names,sizeof(names),file);
printf("%s",names);
token=strtok(names,":");
while(token!=NULL)
{
token=strtok(NULL,":");
printf(" \n %s",token);
lecture=strtok(token,",");
while(lecture!=NULL)
{
lecture=strtok(NULL,",");
printf(" \n\n %s",lecture);
}
}
}
fclose(file);
答案 0 :(得分:1)
因此,您希望将名称存储在单独的数组中,并将课程存储在另一个数组中吗? 您将需要两个单独的标记,您使用相同的标记来表示名称和课程。 试试这个:
FILE *file;
file = fopen("C:\\lessons.txt", "r");
char names[100], *token, *difftok;
while (fgets(names, sizeof(names), file) != NULL) {
token = strtok(names, ":")
//puts(token); ---> George Adams
difftok = strtok(NULL, ",");
//puts(difftok); ---> Math
difftok = strtok(NULL, ",");
//puts(difftok); ---> Science
difftok = strtok(NULL, "\n");
//puts(difftok); ---> Germany
}
fclose(fp);
}
在我的摘录中,令牌将始终代表名称,而difftok将始终是讲座,从这里我想你可以弄清楚如何将令牌存储到数组中。 Token进入一个,difftok进入另一个。
此外,您的EOF条件错误,feof到达文件末尾时返回非零值:
while(!feof(file))
应该是:
while(feof(file) == 0)
但是,在这种情况下,我使用了fgets(...)!= NULL,因为fgets在到达文件末尾时返回NULL。您可能应该使用我的条件,因为feof(file)== 0在与代码一起使用时遇到文件问题的一些结尾,并且会破坏令牌解析字符串的方式。