【问题标题】:Recursive routine in C to print a string in reverse [closed]C中的递归例程以反向打印字符串[关闭]
【发布时间】:2018-02-19 06:24:32
【问题描述】:

在下面的示例程序中,任何人都可以帮助区分两个函数的输出吗?

根据我的理解,这两个函数的输出应该是相同的。

#include<stdio.h>
void printRevStr1(char *ptr)
{
        if(*ptr)
        {
                printRevStr1(ptr+1);
                printf("%c",*ptr);
        }
}
void printRevStr2(char *ptr)
{
        if(*ptr)
        {
                ptr++;
                printRevStr2(ptr);
                printf("%c",*ptr);
        }
}
main()
{
        char arr[100]="Stackoverflow";
        printRevStr1(arr);
        printf("\n");
        printRevStr2(arr);
        printf("\n");
}

下面是输出,

输出

wolfrevokcatS
wolfrevokcat

【问题讨论】:

  • 您是否尝试使用调试器单步执行代码?
  • ptrprintf("%c",*ptr); 的值是什么?

标签: c string recursion


【解决方案1】:

这很简单。

只需按功能检查以下说明:

void printRevStr1(char *ptr)
{
        if(*ptr)
        {
                printRevStr1(ptr+1);
                printf("%c",*ptr);
        }
}

当你实现这个函数时,你得到的输入是字符串Stackoverflow
然后你只需反转字符串并打印它。

在第二个函数中:

void printRevStr2(char *ptr)
{
        if(*ptr)
        {
                ptr++;
                printRevStr2(ptr);
                printf("%c",*ptr);
        }
}

您在打印之前编写的语句:ptr++; 是将指针移至字符串中的下一个字符。那就是你现在的字符串变成tackoverflow

因此您收到了这样的输出。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    它工作得很好......但是你正在推进并打印下一个字符,而实际上它是你应该打印的前一个字符:

    void printRevStr2(char *ptr)
    {
        if(*ptr)
        {
            ptr++;                   
            printRevStr2(ptr);
            printf("%c",*(ptr - 1)); // <----- here
    
        }
    }
    

    这给了

    wolfrevokcatS
    wolfrevokcatS
    

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2014-01-12
      • 2013-12-07
      • 2021-10-31
      相关资源
      最近更新 更多