递归实现字符串逆序

2023-03-28 14:09:15

编写一个函数 reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不是逆序打印。
(要求:不能使用C函数库中的字符串操作函数。)
(在本次练习中,由于对自增理解不到位,迷糊了好一会,写错了一次。在与朋友讨论后搞懂了,所以在这里记录一下,以免再犯。)
以下内容记录了代码、运行结果以及递归过程,便于理解。

1. 实现字符串逆序

1.1 代码

#include <stdio.h>
int reverseString(char* string) {
	if (*(++string) != '\0') {
		reverseString(string);
	}
	printf("%c", *(string-1));
}

int main() {
	char *string = "abcd";
	reverseString(string);
	printf("\n");
	system("pause");
	return 0;
}

1.2 运行结果

在这里插入图片描述

1.3 递归过程

在这里插入图片描述

2. 实现字符串逆序(但是最后一位多打印了一遍)

2.1 代码

#include <stdio.h>
int reverseString(char* string) {
	if (*string != '\0') {
		string++;
		reverseString(string);
	}
	printf("%c", *(string-1));
}

int main() {
	char *string = "abcd";
	reverseString(string);
	printf("\n");
	system("pause");
	return 0;
}

2.2 运行结果

在这里插入图片描述

2.3 递归过程

在这里插入图片描述

3 总结

在两段代码中,不同之处在于对指针string自增的顺序,是先增加1还是后增加1。
在1.1中,先自增再判断,就能够发现能够完成所有字符的逆序,不会将最后一位多打印一遍。而在2.1中,由于先判断当前字符是否为\0,在增加1,使得在当前函数运行结束后,指针指向了下一个字符。(可能总结的不到位,结合递归过程的图或许更好理解些)
最后一次判断当前字符为\0,接着打印就不用说了,打印的就是d。但在返回到倒数第二次递归函数中时,因为此时指针已经指向了\0,所以打印其前一位字符时,打印了d。 所以最后运行结束后,会发现,打印内容会出现两次d(最后一位)。

  • 作者:仓笙
  • 原文链接:https://blog.csdn.net/qq_43503979/article/details/117632240
    更新时间:2023-03-28 14:09:15