这道题要求逆序字符串,写一个递归函数实现这个功能并且不能使用库函数。那么可以这样考虑
例如:“abcdefg” ,既然要递归实现,那么可以先逆序 a 和 g ,变成 “gbcdefa” ,然后再逐层递归。
那么对于交换首字符和最后一个字符,我们依然可以用指针 str 来表示,要知道最后一个字符,就得知道字符串长度,字符串长度-1就是我们想要的最后一个字符的数组下标。但是题目不允许用库函数,所以用到上次自己实现到的 my_strlen 函数求出长度。
我们将首字符拿出来,存到临时变量 tmp 中,然后将最后一个字符放在首字符的位置,此时我们需要在末尾补一个 "\0",因为如果不这样的话,我们无法在递归中找到最后一个字符,补上了之后再调用 reverse_string 函数,进行中间的字符串的首尾交换。再把刚刚的首字符放在末尾位置即可。代码如下:
define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strlen(const char*str)
{
assert(str != NULL);
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char *str)
{
int len = my_strlen(str);
char tmp = 0;
tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (my_strlen(str + 1)>1)
reverse_string(str + 1);
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
system("pause");
return 0;
}