include<stdio.h>
#include<string.h>
//将一个字符串逆序打印,用递归,不得用库函数。
void main()
{
char s[] = "I LOVE YOU";
int len=strlen(s)-1;//数组下标最大值
int i = 0;
for (i = 0; i < len; i++)
{
int temp;
if ((len - i) > i)
{
temp = s[i];
s[i] = s[len - i];
s[len - i] = temp;
}
}
printf("%s",s);
}
我先用自己的想法写出一个,就是控制数组下标交换内容。
想了想还是这个要清晰一点。
#include<stdio.h>
#include<string.h>
//将一个字符串逆序打印,用递归,不得用库函数。
void main()
{
char s[] = "I LOVE YOU!";
int left= 0;
int right = strlen(s) - 1;//数组下标最大值
while (right > left)
{
int temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
printf("%s", s);
}
递归实现
#include<stdio.h>
#include<string.h>
//将一个字符串逆序打印,用递归,不得用库函数。
int my_strlen(char* str)//求字符串长度
{
int count = 0;
while (*str!= '\0')
{
str++;
count++;
}
return count;
}
void reverse_print(char* str)//逆序
{
char temp = str[0];
int len = my_strlen(str);
str[0] = str[len - 1];
str[len - 1] = '\0';
if (my_strlen(str + 1) >= 2)
{
reverse_print(str + 1);
}
str[len - 1] = temp;
}
void main()
{
char str[] = "I love you";
reverse_print(str);
printf("%s",str);
}
如果要用递归,那就是大事化小。于是,我想到,把数组首元素存下来,把尾数组元素放到首元素位置,将尾元素赋值\0,我们一直通过strlen的特性,遇到\0就结束,减小len,改变首元素尾元素位置(逆序,不停调用自身)。