我正在尝试使用递归来反转字符串但它不起作用。 怎么了?? 它为测试用例显示了一些输出“t set a♠♣♦♥☻☺”这是一个测试“
#include "stdio.h"
#include "string.h"
void rec(char [],int,int);
void main()
{
char ch[50];int j,i=0;
printf("Enter the string: ");
gets(ch);
j=strlen(ch)-1;
rec(ch,i,j);
puts(ch);
}
void rec(char ch[],int i,int j)
{
char t;
if(i>=j) return;
t=ch[i];
ch[i]=ch[j];
ch[j]=i;
rec(ch,++i,--j);
}
答案 0 :(得分:1)
ch[j]=i;
您正在为字符分配一个不是您想要的整数。
您将值存储在t
所以
ch[j] = t;
是你需要的。
答案 1 :(得分:0)
您需要更改
ch[j]=i;
到
ch[j]= t;
请注意无需null显式终止字符串。 strlen
给出长度不包括\0
字符的字符串。您正在将strlen(ch)-1
传递给您的函数,这意味着它将在\0
之前开始反转字符中的字符。因此,在反转之后,字符串将以空值终止。
答案 2 :(得分:0)
在本声明中
return Promise.flatMap(list, function(){
return Promise.resolve([1, 2, 3]);
});
您使用ch[j]=i;
代替i
只用两个参数就可以简化函数编写。例如
t
并调用
void rec( char s[], size_t n )
{
if ( !( n < 2 ) )
{
char c = s[0];
s[0] = s[n-1];
s[n-1] = c;
rec( s + 1, n - 2 );
}
}
现在尝试只用一个参数编写函数:rec( ch, strlen( ch ) );
:)