递归实现字符串字符反转

题目: 编写一个函数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

递归实现字符串字符反转的相关文章

rever_string()函数(递归实现)即递归实现字符串反转

一.实现功能: 将输入字符串abcde反转成edcba输出 二.代码 #include <stdio.h> #include <string.h> #include<assert.h> #define MAX_STR 10 void reverse_string(char * string) { int len = strlen(string); assert(string); if (len <= 1) { return; } else { char ch =

字符串处理:如何实现字符串的反转

1. 问题描述: 把一个字符串进行反转, 如 "abcdt" 反转之后是 "tdcba" 思路1: 运用递归的方法进行反转 假设反转方法为 reverseString(String str)1)当字符串为空或者只有一个字符时,返回原字符2)当字符串有两个以上(长度为len)的字符时,反转后的字符串为 第二个字符开始的子串的反转结果+第一个字符, 即 reverseString(str.subString(1))+str.charAt(0); 代码实现如下: publ

c - 字符串的反转

1,递归实现 1 // 递归实现字符串反转(可通过栈的调用来加深理解). 2 char * 3 reverse(char *c) { 4 if(!c) 5 return NULL; 6 int len = strlen(c); 7 if(len > 1) { 8 char tmp = c[0]; 9 c[0] = c[len - 1]; 10 c[len - 1] = '\0'; //尾部的字符在下一次递归时不处理. 11 reverse(c + 1); 12 c[len - 1] = tmp;

算法分析-如何实现字符串的反转

问题:将一个句子中的单词进行反转,例如:"how are you",进行反转后的结果为"you are how". 解题思路:将这个句子进行两次反转操作即可. 1)对整个字符串进行字符反转,反转结果"uoy era woh": 2)接下来对每个单词进行字符反转,结果就是"you are how". 源代码: /* 问题:将一个句子中的单词进行反转,例如:"how are you",进行反转后的结果为&quo

10、使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。 服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。

/**10.使用TCP协议完成一个客户端一个服务器.客户端从键盘输入读取一个字符串,发送到服务器. 服务器接收客户端发送的字符串,反转之后发回客户端.客户端接收并打印. * 客户端*/ import java.io.*; import java.net.*; public class Test10_Client { public static void main(String[] args) throws Exception { Socket s = new Socket("192.168.0.

java字符串的反转

Java中字符串的反转 首推方法: public void convertStr(String str){          //将String 对象转换为可改变的StringBuffer类对象          //然后调用StringBuffer类的reverse()方法实现反转          String strReverse=new StringBuffer(str).reverse().toString();          System.out.println(strRever

Objective-C:字符串的反转Reverse

OC中字符串的反转方式可以用两种方式来处理: 第一种:从头到尾取出字符串的每一个字符,然后将其从尾到头添加到可变的字符串中,最后输出即可. 第二种:将OC内部的字符串转换为C语言中的字符串,然后动态分配一个数组,然后将字符串内容拷贝到数组中,进行首尾交换操作.共进行数组长度/2次操作. 方式一:OC版本 1 -(NSMutableString*)Reverse 2 { 3 NSUInteger length = [self length]; 4 NSMutableArray *array = [

实现对字符串的反转输出与句子的反转输出

主要实现对一个字符的反转输出,例如,将字符串"abcdefg"反转输出为"gfedcba".对一个句子的反转输出,例如,将句子"I am a student."反转输出为"student. a am I".其中的一个实现代码如下: /** * * @author JiaJoa * 实现对字符串的反转,对句子单词的反转 */ public class StringReverse { public static void main

Java实验项目三——递归实现字符串查找和替换操作

Program:按照下面要求实现字符串的操作: (1)设计一个提供下面字符串操作的类 1)编写一个方法,查找在一个字符串中指定字符串出现的次数. 2)编写一个方法,参数(母字符串,目标字符串,替换字符串)将母字符串中的所有目标字符用替换字符串替换. 3)编写一个方法,判断一个email地址是否合法. (2)编写一个测试类,对(1)中的字符串类的方法逐一进行测试. Description:前两个问题采用递归实现,最后一个问题,采用正则验证.代码如下: 1 /* 2 * Description:采用