在 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
或运算符sizeof
returns是size_t
类型的值。您应该使用此类型来指定字符数组的长度,而不是 int
.
类型
比如最后一个函数可以这样调用
char str[] = "Hello World!";
puts( reverseArray( str, strlen( str ) ) );
这是我的递归函数
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
或运算符sizeof
returns是size_t
类型的值。您应该使用此类型来指定字符数组的长度,而不是 int
.
比如最后一个函数可以这样调用
char str[] = "Hello World!";
puts( reverseArray( str, strlen( str ) ) );