C:逐行反转文件

时间:2017-06-23 01:40:29

标签: c

我尝试使用递归逐行反转文件。所以基本上是一个输入。我正在寻找一种方法可以在不使用任何指针或数组的情况下开始。如果你能指出我正确的方向,那就完美了。

dogs
cats

的输出为

sgod
stac

这是我的源代码到目前为止的样子,但是我只是反转整个文本文件(通过命令行<)而不是行。

#include <stdio.h>

void Recursion();
int main (int argc, char argv)
{
  Recursion();
  printf("\n");
}

void Recursion()
{
  int c;
  while((c = getchar()) != EOF)
    {
      Recursion(c);
      printf("%c",c);
    }
}

1 个答案:

答案 0 :(得分:1)

首先,您必须确保您的“递归”功能可以工作到一行。你的函数“递归”可以这样声明:

//source must have pointed to storage space of the line and the 
//storage space of line must be not read-only. As we know "dogs" is  
// a constant value you can't change.

int Recursion(char *source,int length);

输入字符串“dogs”到递归,输出必须是“sgod”。

然后,您可以读取文件的每一行并将它们输入到此函数Recursion中,以便您可以获得所需的结果。

我认为Recursion函数可能有错误,或者您无法从文件中读取行。如果你能给我详细的函数递归或读取文件的模块,很容易找出错误。

您正在使用函数getchar()而不是从文件中读取行。所以'EOF'不对,应该是'\ n'。你也不应该在Recursion中使用while,因为它已经是一个递归函数。所以正确的代码如下:

void Recursion()
{
  int c;
  if((c = getchar()) != '\n')
  {
     Recursion(c);
     printf("%c",c);
  }
  else
     return;
}

我认为你的代码不好。在我看来,反转字符串的功能不需要递归,只是喜欢这个:

int Recursion(char *source,int length);

这样你就可以将程序分成单独的模块---读取行和反向。因此主要功能就是这样:

int main()
{
    int fd = open();

    while(1)
    {
       // 1.read line
       ....
       //2. is EOF?
       break;
       //3. reverse line
       Recursion(line,strlen(line));
    }
}

我希望能帮助你。