逐行解释代码

时间:2017-03-25 10:06:07

标签: c string recursion reverse

我在C中发现了这个反转字符串的代码。此代码使用递归,我无法理解reverse()函数。谁能帮忙。

    #include <stdio.h>

    void reverse() //recursive function to reverse string.
    { 
        char c;
        scanf("%c",&c);
        if(c!='\n')
        { 
          reverse();
          printf("%c",c);
        }

    }

    void main()
    {
      printf("\nenter a string: ");
      reverse();
      getch();

    } 

3 个答案:

答案 0 :(得分:0)

reverse函数以相反的顺序打印char * /字符串,例如“问题” - &gt; “noitseuq”。

通过逐个字符地读取输入字符串(scanf一次只读取一个字符)并在当前字符之前在下一个字符上调用print来实现此目的。< / p>

如果您交换reverse();printf("%c",c);,您会注意到它会在当前字符后打印下一个字符,因此订单与输入相同。关键是它是在打印之前递归以反转字符顺序。

答案 1 :(得分:0)

在你的代码中,if(c!='\ n')这意味着在遇到新行之前,if语句将会执行。因此,在遇到\ n之前需要输入。 然后如果c = \ n将执行printf语句,它将打印输入字符串的最后一个字符。将此递归视为Stack的一个示例。

答案 2 :(得分:-1)

 #include <stdio.h>

void reverse() //recursive function to reverse string.
{ 
    char c;        //declare a character
    scanf("%c",&c); //scan that is get input from user in format scanf("format specifiers",&value1,&value2,.....); 

    if(c!='\n')  //check if the character is blank
    { 
      reverse();   //if blank call the method reverse() again to get get input which is not blank
      printf("%c",c);  //it will print the character from last letter to first when it is not blank
    }

}

void main()
{
  printf("\nenter a string: ");  //skips a line and asks user to enter a string
  reverse(); //calls method reverse()
  getch();

}