题目:逆序输出字符串
#include<stdio.h>
#include<string.h>
void fun(char* q)
{
if (*q)
{
fun(q + 1);
putchar(*q);
}
}
void fun2(char* a)
{
int len = strlen(a);//计算字符串长度
/*int mystrlen(char* a) 如果要求不能用库函数
{
if(!(*a)) return 0;
return 1+mystrlen(a+1);
}
*/
char c = a[0]; //假设字符串为“abcd” 用变量c记住首字符
a[0] = a[len - 1]; //a与d互换
a[len - 1] = '\0'; //并将d的位置换为'\0' 此时字符串为dbc\0
if (strlen(a + 1) >= 2) //计算从b开始的字符串长度,>=2才可以互换,不然就一个字符没必要换;
fun2(a + 1); //关于为什么要+1?因为d已经到了他目的地,无需管他了。
a[len - 1] = c; //直到if不成立后,将原先c中字符挨个放在\0处
}
int main()
{
char a[100];
gets(a);
fun(a); // 不改变数组内容;
putchar(10);
fun2(a); // 改变数组内容;
puts(a);
return 0;
}