在 C 中使用递归反转数组中的字符

reverse a character in array using recusion in C

这是我的递归函数

void reverseArray(char *str,int len)
    {
        char temp;
        if(len==(0.5*len))
        {
            return;
        }
        temp=*(str+len-1);
        *(str+len-1)=*str;
        *str=temp;
        reverseArray(str+1,len-1);
    }

我试图反转字符,但是当我发送 {'1', '2', '3', '4', '5', '6','7'} 运行时,我总是得到 7123456只有最后一个字符成为第一个,其他字符不变。

在本次通话中

reverseArray(str+1,len-1);

第二个参数不正确。你必须写

reverseArray(str+1,len-2);

也代替这个条件

if(len==(0.5*len))

写的好多了

if ( len < 2 )

函数可以如下所示

void reverseArray( char *str, size_t n )
{
    if ( !( n < 2 ) )
    {
        char tmp = *str;
        *str = *( str + n - 1 );
        *( str + n - 1 ) = tmp;

        reverseArray( str + 1, n - 2 );
    }
}

或者

char * reverseArray( char *str, size_t n )
{
    if ( !( n < 2 ) )
    {
        char tmp = *str;
        *str = *( str + n - 1 );
        *( str + n - 1 ) = tmp;

        reverseArray( str + 1, n - 2 );
    }

    return str;
}

注意函数strlen或运算符sizeofreturns是size_t类型的值。您应该使用此类型来指定字符数组的长度,而不是 int.

类型

比如最后一个函数可以这样调用

char str[] = "Hello World!";
puts( reverseArray( str, strlen( str ) ) );