递归实现字符串翻转

编写一个函数reverse_string(char * string)

实现:将参数字符串中的字符反向排列。

要求:不能使用C函数库中的字符串操作函数。

  1. 非递归实现
void reverse(char *str)
{
	char *left = str;
	char *right = str + strlen(str) - 1;
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

2.递归实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char* reverse_string(char * string,int len);
	int i,LEN=0;
	char arr[]="abcd";
	LEN=strlen(arr);
	char ret[LEN];
	char *p=arr;
	for(i=0;i<LEN;i++)
		ret[i]=*(reverse_string(p,LEN));
	printf("%s\n",ret);
	system("pause");
	return 0;
}
char* reverse_string(char * string,int len)
{
	int static j=0;
	char s[len]="0";
	if(*string==‘\0‘)
		return s;
	else
	{
		s[len-j]=*string;
		j++;
		reverse_string(string++);
	}
}

递归优化:

int length(char *str)
{
	int count = 0;
	while (*str)
	{
		count++;
		str++;
	}
	return count;
}
void reverse(char *str)
{
	int len = length(str);
	if (len== 0)
	{
		return;
	}
	else
	{
		char tmp = *str;
		*str = *(str + len - 1);
		*(str + len - 1) = ‘\0‘;
		reverse(1+str);
		*(str + len - 1) = tmp;
	}
}
int main()
{
	char arr[] = "bit-tech";
	reverse(arr);
	printf("%s\n", arr);
	system("pause");
	return 0;
}

递归调用图如下

时间: 2024-10-11 17:50:24

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

reverse_string(char *string)递归实现字符串翻转

函数实现之前 先看一个例子 void fun(int i) { if (i > 0) fun(i / 2); printf("%d ",i); } int main(void) { fun(10); return 0; } 输出结果是什么? 这是<c语言深度剖析>中的一个例子  在这个例子中 printf("%d ",i):语句是fun函数的一部分 必定执行一次fun函数,就要打印一次.函数展开过程如下: void fun(int i) { //f

字符串翻转,单词内不翻转

字符串翻转,单词内不翻转.如I am from Chongqing->Chongqing from am I 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 void reverse(char *str, int beg, int end); 6 void reverseSentece(char *str); 7 int main() 8 { 9 char str[128]; 10

字符串翻转

字符串翻转 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写.比如"Hello World"变形后就变成了"wORLD hELLO". 输入描述: 给定一个字符串s以及它的长度n(1≤n≤500) 输出描述: 请返回变形后的字符串.题目保证给定的字符串均由大小写字母和空格构成

JAVA用标准库自己写一个字符串翻转方法,翻转字符串中字母非单词

例如输入:I love programming 输出:I evol gnimmargorp 算法思路就是:根据空格提取每一个单词,存放在一个buffer里进行翻转处理,再添加到新的字符串.最后新的字符串就完成整个方法过程. public class ReserveString { public String reserve(String sentence){ String backS = new String(); StringBuffer temp = new StringBuffer();

c/c++面试题(4)字符串翻转/打印任意进制格式/类型转换

1.字符串的翻转,这里一般是字符数组.不包括字符串字面值. char* reversal_str(char* str,size_t size); 翻转之后的字符串是原来的字符串的翻转. #include <stdio.h> #include <string.h> char* reversal(char* str,size_t len) { if(str != NULL) { char* start = str; char* end = str + len - 1; char ch;

CareerCup之1.2C风格字符串翻转

[题目] 原文: Write code to reverse a C-Style String. (C-String means that "abcd" is represented as five characters, including the null character.) 译文: 写代码翻转一个C风格的字符串.(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符) [分析] 这是一道经典的面试题目,虽然看似简单,但仍然有陷阱.唯一的陷阱

C字符串翻转

实现字符串翻转,思路很简单,就是首尾字符对调. void reverse(char* str){ char* p = str + strlen(str) - 1;//最后一个字符地址 char temp; while (str<p) { temp = *p;//获取p指向字符串 *p-- = *str;//p 往左边移动,设置值为*str *str++ = temp; } } 注意str<p 这里,代表指针变量的大小,因为同一个字符串的地址,str指向首字母的指针变量的值,p是指向末尾字符的指

递归实现字符串反向排列

递归实现字符串反向排列决对不是一个好的方法,也不提倡这么去做.这里只是借助这个题深入的了解一下递归: 例:不使用库函数实现,递归实现字符串反向排列 #include<stdio.h> #include<stdlib.h> #include<assert.h> int my_strlen(char const *str) { assert(str); int len = 0; while (*str) { len++; str++; } return len; } cha

字符串翻转-不能使用系统函数

思想 定义头尾两个指针 交换头尾指针的数据 //字符串翻转 char *strrev(char *str){ //判断字符是否为null或是空字符串 if(str == NULL || str == '\0') { return str; } //定义char数组指针 char *start = str; char *end = str; while(*end != '\0'){ //指向最后一个结点 end ++; } //交换头和尾的值 char temp; --end; //去除\0的位置