我尝试使用递归逐行反转文件。所以基本上是一个输入。我正在寻找一种方法可以在不使用任何指针或数组的情况下开始。如果你能指出我正确的方向,那就完美了。
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);
}
}
答案 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));
}
}
我希望能帮助你。