前言
- 逆序输出字符串最可能先想到的是遍历时用栈保存字符,最后出栈。既然栈可以实现,那我们也可以用递归的方法来实现,并且一定会比较简单。
- 除了以上两种,还可以对字符串进行原地逆置,最后再将该字符串输出即可。
一、简单递归实现
void fun(char *s)
{
if(*s!='\0') // 递归终止条件
{
fun(s+1); // 注意这里是先递归再输出,这样就可以从后面开始逆序输出
printf("%c",*s);
}
}
int main(int argc, char *argv[]) {
char s[20];
gets(s);
printf("原始字符串:%s\n",s);
printf("逆序输出字符串");
fun(s);
return 0;
}
运行结果
二、 原地逆置实现
void revstr(char *s)
{
if(s!=NULL)
{
char *result = s; //保存字符串首地址,便于输出
int len = strlen(s);
char *r = s+len-1; // 定位到最后一个字符
char temp;
while(r>s) // 两个指针相向而行
{
temp = *s;
*s = *r;
*r = temp;
s++;
r--;
}
printf("%s",result);
}
}
int main(int argc, char *argv[]) {
char s[20];
gets(s);
printf("原始字符串:%s\n",s);
printf("逆序输出字符串");
revstr(s);
return 0;
}