【问题标题】:C - program checks only the first word in fileC - 程序只检查文件中的第一个单词
【发布时间】:2014-11-11 22:21:19
【问题描述】:

这里是 C 初学者。有什么建议么?我有一个包含文本的文件,我必须找到所有可以前后读取相同的单词(回文),例如旋转器、眼睛等。问题是这个程序只检查文件中的第一个单词。 提前致谢。

这是我现在的代码:

#include <stdio.h>
#include <string.h>
int main() {
    char buffer[255];
    char one[255];
    char two[255];
    char *fp;
    fp = fopen("duom.txt", "r");
    fgets(buffer, 255, (FILE*)fp);
    sscanf(buffer, "%s", one);

    strcpy(two, one);
    strrev(two);

    if(strcmp(one, two) == 0)
        printf("%s palindrome\n", one);
    else
        printf("%s not palindrome\n", one);

    return 0;
    }

【问题讨论】:

    标签: c io char palindrome


    【解决方案1】:

    你的代码只会运行一次,你需要把你的主要分析放在一个while循环中。

    我会让你测试循环什么以及如何检查下一个单词。

    【讨论】:

      【解决方案2】:

      问题是您需要处理文本中的每个单词,而您只处理一个。为了对文本中的每个单词重复你的逻辑,你需要一个loop。我不会解释这个概念,因为我提供了一个参考。相反,我将向您展示如何做到这一点:

      while (!feof(f)) {                // while there are more characters to be analysed
         fscanf(fp, "%s", one);         // read another word
         strcpy(two, one);              // analyse it
         strrev(two);
      
         if(strcmp(one, two) == 0)
             printf("%s palindrome\n", one);
         else
             printf("%s not palindrome\n", one);
      }
      

      Here 你可以找到我正在使用的 feof 函数的参考。其余代码和你的一样。

      【讨论】:

      • 这只查看输入文件每一行的第一个单词。我认为需要有一个嵌套循环,其中外部循环将一行读入 buffer[],内部循环遍历缓冲区中的可用字符,提取每个连续的单词并检查该单词
      • 感谢您的评论。我没注意。但是, fscanf 可以与 %s 说明符一起使用,它读取一个单词,忽略所有空格。我已经更新了我的答案。
      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多