题目: 编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
思路分析:以ABCDEFGH为例,每次将字符串的首字符和尾字符进行交换。
1、将A与I交换,此时字符串变为IBCDEFGA,而递归的字符串变成了BCDEFG;
2、将B和G交换,此时字符串变成IGCDEFBA,而递归字符串变成了CDEF;
依次类推,直到字符串里剩下一个字符不能交换为止,此例恰好两两配对,交换完。
源代码如下:
#include <stdio.h> #include <string.h> void reverse_string(char * string) { int len = strlen(string); if (len <= 1) { return; } else { char tmp = string[0]; string[0] = string[len - 1]; string[len - 1] = '\0'; reverse_string(string+1); string[len - 1] = tmp; } } int main() { char p[] = "ABCDEFGH"; reverse_string(p); printf("%s\n", p); }
运行结果如下:
但是如果把代码中的 reverse_string(string+1);改成reverse_string(string++);和reverse_string(++string);运行结果会有什么不一样呢?下面我们来看一下运行结果:
reverse_string(string++);的运行结果:
reverse_string(++string);的运行结果:
这两个结果都与reverse_string(string+1);的运行结果不一样,这到底是为什么呢?
因为reverse_string(string++);是先用后加,即在这一次执行程序的时候它的值并没有改变,而是在下一次执行程序时它的值才会改变;而reverse_string(++string);是先加后用 ,即在这一次程序执行之前它的值已经改变了,所以这两个改变都不能达到我们想要的结果。
时间: 2024-10-10 02:22:04