我试图读取行并从中提取信息。我的文字有例如;
abate terminar, hacer cesar
abated amainado, amplacado, mitigado
这是一本字典。 第一个词是英语,其余的是西班牙语。我试图将英语单词保存到一个变量中,然后将该行的其余部分保存到另一个变量中。我不知道该怎么做?我编写了这段代码,它读取所有文本文件并将其全部打印出来。
int main(int argc, const char * argv[]) {
char filename[] = "/Users/MyName/Desktop/span.rtf";
FILE *file = fopen ( filename, "r" );
if (file != NULL) {
char line [1000];
while(fgets(line,sizeof line,file)!= NULL) /* read a line from a file */ {
fprintf(stdout,"%s",line); }
fclose(file);
}
return 0;
}
答案 0 :(得分:1)
这是一个很好的开始,使用fgets()
读取整行,然后可以解析这是一个很好的方法。
接下来,您需要考虑如何存储字典。一种方法可能是静态大小的结构数组:
struct {
char *english;
char *spanish;
} words[1000];
这假定不超过1000个单词。
要存储每一行,只需找到第一个空格字符,然后将其分为英语和西班牙语:
size_t word_count = 0;
while(fgets(line, sizeof line, file) != NULL)
{
char * const sp = strchr(line, ' ');
if(sp != NULL)
{
*sp = '\0';
while(isspace((unsigned char) *++sp))
;
if(isalpha((unsigned char) *sp)
{
words[word_count].english = strdup(line);
words[word_count++].spanish = strdup(sp);
}
}
}
这样的事情应该让你开始。这假定存在strdup()
,如果你没有重新实施它是微不足道的。当然,您应该添加代码来检查内存分配失败。
答案 1 :(得分:0)
试试这个:
char english[256];
char spanish[256];
while(fscanf(file,"%[a-z]%*[ ]%[a-z, ]\n", english, spanish) != 0) {
fprintf(stdout, "English: %s\n Spanish: %s\n", english, spanish);
}