综述:
本文提供两种方法,分别为递归,非递归
#include <stdio.h>
//逆置输出字符串
//非递归逆置
void reverse_str2(char* p)
{
char* p1 = p;
char* p2 = p;
while (*p2)
p2++;
p2--;
while (p1<p2)
{
//无参交换
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
p1++;
p2--;
}
}
//递归逆置(优点:不产生多余变量(假的))
//此种方法会导致多打印一个空格
void reverse_str(char* p)
{
if(*p)
reverse_str(p+1);
printf("%c",*p);
}
//相比2不会多打印一个\0
void reverse_str3(char* p)
{
if(*p)
{
reverse_str(p+1);
printf("%c",*p);
}
}
int main(int argc, char *argv[])
{
char buf[1024] = "china";
reverse_str3(buf);
printf("Hello World!\n");
return 0;
}
下面为带保存的递归逆序字符串、
#include <stdio.h>
#include <string.h>
void strReverse(char * str,char *buf)
{
if(*str)
{
strReverse(str+1,buf);
// printf("%c",*str);
strncat(buf,str,1);
}
}
int main(void)
{
char buf[1024] = {0};
char arr[] = "china";
strReverse(arr,buf);
printf("%s\n",buf);
return 0;
}