用递归反转c中的字符串

Amo*_*ngh 2 c string recursion

我已编写代码来反转c中的字符串......它工作正常,但我无法在main()函数中返回反向字符串.

#include<stdio.h>

main()
{
  char a[17]="abcdefg";
  reverse(a);
  printf("\n");
  system("PAUSE");
}
int reverse(char *a)
{
   if(*a!='\0')
   {   
     reverse(a+1);
   }
   printf("%c",*a);
}         
Run Code Online (Sandbox Code Playgroud)

它打印反转的字符串,但我想要反转的字符串main().我怎样才能做到这一点?

unw*_*ind 5

您需要修改字符串,即输入缓冲区reverse(),而不是仅仅打印它。

递归地执行此操作似乎有点令人讨厌,但当然应该是可能的。

基本上,我猜打印变成了一项作业,如下所示:

  1. Base:空串的反转就是空串。
  2. 步骤:字符串的反转首先交换第一个和最后一个字符,然后递归字符串的其余部分。


小智 5

以下是使用递归反转字符串的一种方法!

#include <stdio.h>
#include <string.h>

void rev_str_recursive(char arr[], size_t iStart, size_t iLast)
{
    if( iStart < iLast )
    {
        //swap
        char temp = arr[iStart];
        arr[iStart] = arr[iLast];
        arr[iLast] = temp;

        rev_str_recursive(arr, ++iStart, --iLast);  
    }
}

void main()
{
    char cArray[] = {"A quick brown fox jumps over a lazy dog"};

    rev_str_recursive(cArray, 0, strlen(cArray)-1);
}
Run Code Online (Sandbox Code Playgroud)