Reverse a string using a recursive function

浪尽此生 提交于 2019-12-02 02:21:41

The reversing starts by copying the n-th character of string1 array into string2. The n-th character happens to be the null terminator. It becomes the first character of your new string, so the string looks empty to all standard C routines, including printf.

Calling

reverse(string1,string2,n-1,j);

from the main should fix the problem. The condition in the reverse should be changed from if(n>0) to if(n>=0) as well.

in-place (the caller could make a copy of the string before calling this function) string reverse with tail-recursion

void reverse (char *str, size_t len)
{
  char tmp;
  if (len-- < 2) return;

  tmp = *str;
  *str = str[len];
  str[len] = tmp;

  reverse (str+1, len -1);
}

O, if you don't want pointers:

void reverse (char str[], size_t len)
{
  char tmp;
  if (len-- < 2) return;

  tmp = str[0];
  str[0] = str[len];
  str[len] = tmp;

  reverse (str+1, len -1);
}

Although it does not save the resulting string anywhere, you get the idea.

#include <stdio.h>

void rev (const char* str);

int main () {
    const char str[] = "!dlrow ,olleH";

    printf("%s\n", str);

    rev(str);
    printf("\n");

    return 0;
}

void rev (const char* str) {
    char c = *str;
    if (c != '\0') {
            rev(str + 1);
        printf("%c", c);
    }
}

I have corrected the program. Please find the changes below

void reverse(char s1[],char s2[],int n,int j)
{
 if(n>0)
 {
        s2[j]=s1[n-1];
        reverse(s1,s2,--n,++j);
 }
 else
        s2[j]='\0';
}

i recommend using library , size=strlen(array) in stead of

for(i=0;string1[i]!='\0';i++)
n++;

to count how many characters in arra

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!