【问题标题】:Converting all strings in a txt file to lowercase in c [closed]将txt文件中的所有字符串转换为c中的小写[关闭]
【发布时间】:2016-02-24 18:02:47
【问题描述】:

我被分配将 txt 文件中的所有字符串转换为小写,然后将其输出到新的 txt 文件中,但我似乎无法在任何地方找到如何做到这一点。任何帮助都会非常感激!谢谢这是我到目前为止所拥有的,但最后有 y 所以我在想是否有更好的方法可以做到这一点,或者我是否可以删除顶部有两个点的 y..

#include<stdio.h>
#include<process.h>

void main() {
   FILE *fp1, *fp2;
   char a;

   fp1 = fopen("test.txt", "r");
   if (fp1 == NULL) 
   {
      puts("cannot open this file");
      exit(1);
   }

   fp2 = fopen("test1.txt", "w");
   if (fp2 == NULL) {
      puts("Not able to open this file");
      fclose(fp1);
      exit(1);
   }

   do
   {
      a = fgetc(fp1);
      a = tolower(a);
      fputc(a, fp2);
   } while (a != EOF);

   fcloseall();
   getch();
}

【问题讨论】:

  • '我似乎在任何地方都找不到怎么做' - 真的吗?请张贴您到目前为止所做的事情,例如。您的 Google 搜索字符串。
  • 按字符读写。忘记字符串。
  • edited 添加了我能找到的内容
  • 'while (a != EOF);'太晚了:(

标签: c file lowercase


【解决方案1】:

当您从文件中读取输入时,您应该在继续使用它之前检查您是否获得了有效的输入。在您的情况下,您会在该行中获得输入。

a = fgetc(fp1);

在继续使用之前,您需要检查a 是否为有效输入。

if ( a != EOF )
{
   a = tolower(a);
   fputc(a, fp2);
}

另一件事要更新。不要使用

char c;

使用

int c; 

改为。

char 类型可以是您平台上的有符号类型或无符号类型。如果它是无符号类型,它永远不会有负值。因此,它永远不会等于EOF,通常是-1,这将导致无限循环。

如果您查找fgetc 的文档,您会注意到它的返回类型是int,而不是char

您的程序可以更新为:

void main() {
   FILE *fp1, *fp2;
   int a;

   // Add rest of your code
   // ...

   do
   {
      a = fgetc(fp1);
      if ( a != EOF )
      {
         a = tolower(a);
         fputc(a, fp2);
      }
   } while (a != EOF);

   // Add rest of your code
   // ...
}

do-while 循环可以简化为:

   while ( (a = fgetc(fp1)) != EOF )
   {
      a = tolower(a);
      fputc(a, fp2);
   }

【讨论】:

  • 另外,tolower 和许多其他您可能想象会采用和/或返回 char 类型的库函数,请使用 int 类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2013-04-06
  • 2010-12-09
相关资源
最近更新 更多