我正在尝试使用递归来使用递归来反转字符串但不使用指针,但它给出了一个错误,说它必须是可修改的值。我该怎么办?
#include<stdio.h>
#include<conio.h>
#include<string.h>
void reverse(char x[30],int start,int end)
{
char c;
if(start>=end)
return;
c=(x[30]+start);
(x[30]+start)=(x[30]+end);
(x[30]+end)=c;
}
int main (void)
{
char st[30];
printf("Enter the string ");
gets(st);
reverse(st,0,strlen(st)-1);
puts(st);
getch();
return 0;
}
答案 0 :(得分:2)
所有这些陈述
c=(x[30]+start);
(x[30]+start)=(x[30]+end);
(x[30]+end)=c;
错了。然而,错误发生在最后两个语句中
(x[30]+start)=(x[30]+end);
(x[30]+end)=c;
例如评估表达式
x[30]+end
导致临时整数对象。您不能分配临时对象。
可以通过以下方式定义该功能
void reverse( char s[], size_t start, size_t end )
{
if ( ( end - start ) > 1 )
{
char c = s[start];
s[start++] = s[--end];
s[end] = c;
reverse( s, start, end );
}
}
并调用
reverse( st, 0, strlen( st ) );