【问题标题】:saving variables in line from file?从文件中保存变量?
【发布时间】:2017-04-14 15:34:18
【问题描述】:

我正在尝试读取行并从中提取信息。我的文字有例如;

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;
}

【问题讨论】:

  • 阅读 C 教科书中的字符串。
  • 使用getline函数。

标签: c file char spaces


【解决方案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(),如果你没有重新实现它是微不足道的。当然你应该添加代码来检查内存分配失败。

【讨论】:

    【解决方案2】:

    试试这个:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多