Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recursion: Reverse string in its position

Recursion. I checked other online solutions and they seem to be pretty much identical to mine. The code should reverse the string (in its position) but it does not. E.g when input is st2 = "abcdefg" the output is an empty string. I was expecting st2 = "gfedcba". What am i missing?

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


void recurse_reverse(char s[], int sz)
{
    int i=0,j = sz -1;
    if(i<j)
    {
        swap(&s[i],&s[j]);
        recurse_reverse(s+1, sz-2);

    }
}


void swap( char* s1, char *s2)
{
    char tmp;
    tmp = *s1;
    *s1 = *s2;
    *s2 = tmp;
}


int main(void)
{
    char st1[9] = "abcdefg", st2[9];
    strcpy(st2,st1);
    recurse_reverse(st2,9);
    printf("s1 = %s\ns2 = %s",st1,st2);
    printf("\n" );
    return 0;
}
like image 291
Mynicks Avatar asked Jan 05 '23 01:01

Mynicks


1 Answers

You are swapping the 2 zero bytes at the end of st1. Hence, the st2 starts with a null byte and thus the printf() isn't printing anything. You just need to fix your argument passing. Instead of

recurse_reverse(st2,9);

do

recurse_reverse(st2,strlen(st1));

You probably want to add logic to make sure your destination array st2 has sufficient space.

like image 182
P.P Avatar answered Jan 11 '23 08:01

P.P