码迷,mamicode.com
首页 > 其他好文 > 详细

递归实现字符串字符反转

时间:2015-05-12 11:32:08      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

题目: 编写一个函数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);是先加后用 ,即在这一次程序执行之前它的值已经改变了,所以这两个改变都不能达到我们想要的结果。


递归实现字符串字符反转

标签:

原文地址:http://blog.csdn.net/juice521cai/article/details/45664839

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!