C语言递归实现字符串逆序的方式详解

C语言实现字符串逆序,具体内容如下所示:

一、迭代的方式实现

贴上代码:迭代的方式实现

'//字符串逆序:不可用字符串操作函数'
#include <stdio.h>
void swap(char* ch1, char* ch2)             '//交换两个字符串'
{
	char tmp = *ch1;
	*ch1 = *ch2;
	*ch2 = tmp;
}
int my_strlen(char* str)                     '//实现计算字符串字节数'
{
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
void reverse_string(char* str)                '//实现字符串逆序'
{
	int left = 0;
	int right = my_strlen(str) - 1;
	while (left < right)
	{
		swap(str+left, str+right);
		left++;
		right--;
	}
}
int main() {
	char arr[] = "abcdefgh";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

swap()函数还不如不定义,,这样好写一点。

二、递归的方式实现

贴上代码:递归,思路挺难的,重点在于熟悉递归

//递归实现字符串逆序
void reverse_string(char* str)
{
	if (*str != '\0')
	{
		char tmp = *str;
		int length = strlen(str);
		*str = *(str+ length - 1);
		*(str + length - 1) = '\0';
		reverse_string(str + 1);
		*(str + length - 1) = tmp;
	}

}
int main()
{
	char arr[] = "abcdefgh";
	reverse_string(arr);
	printf("%s\n", arr);
	return 0;
}

到此这篇关于C语言递归实现字符串逆序的文章就介绍到这了,更多相关C语言字符串逆序内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言非递归后序遍历二叉树

    本文实例为大家分享了C语言非递归后序遍历二叉树的具体代码,供大家参考,具体内容如下 法一:实现思路:一个栈 先按 根->右子树->左子树的顺序访问二叉树.访问时不输出.另一个栈存入前一个栈只进栈的结点. 最后输出后一个栈的结点数据. #include<stdio.h> #include<stdlib.h> typedef struct TreeNode{ char element; struct TreeNode *left,*right; }Tree,*BTree;

  • C语言数据结构递归之斐波那契数列

    C语言数据结构递归之斐波那契数列 因为自己对递归还是不太熟练,于是做POJ1753的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归.然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样在递归的问题上不太理解.好吧,于是复习CPP,在第229页的时候,看到了斐波那契数列,回想起之前做过的一道题目,发现可以用递归的方法来做.于是决定优化一下之前的代码. 以下这段摘自<C primer plus> 斐波那契数列的定义如下:第一个和第二个数字都

  • C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】

    本文实例讲述了C语言二叉树常见操作.分享给大家供大家参考,具体如下: 一.基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒. 性质: 1.非空二叉树的第n层上至多有2^(n-1)个元素. 2.深度为h的二叉树至多有2^h-1个结点. 满二叉树:所有终端都在同一层次,且非终端结点的度数为2. 在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1. 完全二叉树:除了最大的层次即成为一颗满二叉树且层次最大那层所有的结点均向左靠齐,即集中在左面的位置上,不能有空位置. 对于完全二叉

  • C语言 将字符串逆序输出的实例

    将字符串逆序输出:我先说一个我的错误代码,一开始真的不知道哪里错了,但是当时的想法是自以为是可以的,大家可以先看看我的错误代码 这个代码是错误的,正确的在最下方,不要急,我只是展示一下自己的错误,哈哈 #include <stdio.h> #include <iostream> #include <string.h> #include <math.h> using namespace std; void reverse(char a[]) { char *p

  • C语言实现斐波那契数列(非递归)的实例讲解

    废话不多说,直接上代码 #include <stdio.h> #include <stdlib.h> void f(int n); int main(void) { f(10); return 0; } void f(int n) { if(n==1) { printf("1\n"); return; } if(n==2) { printf("1 1\n"); return; } printf("1 1 "); int*

  • 使用C语言实现字符串逆序操作案例

    编写一个函数 reverse_string(char * string) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. 非递归实现: #include<stdio.h> //编写一个函数 reverse_string(char * string)(非递归实现) //实现:将参数字符串中的字符反向排列. //要求:不能使用C函数库中的字符串操作函数. //求字符串长度 int my_strlen(char* str) { int count = 0; whil

  • C语言解字符串逆序和单向链表逆序问题的代码示例

    字符串逆序 上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { if(p1==p2)return; //swap the value of p1 ,p2 *p1=(*p1)+(*p2); *p2=(*p1)-(*p2); *p1=(*p1)-(*p2); if(p1==p2-1)return; else stringReverse(++p1,--p2); }

  • C语言数据结构之二叉树的非递归后序遍历算法

    C语言数据结构之二叉树的非递归后序遍历算法 前言: 前序.中序.后序的非递归遍历中,要数后序最为麻烦,如果只在栈中保留指向结点的指针,那是不够的,必须有一些额外的信息存放在栈中. 方法有很多,这里只举一种,先定义栈结点的数据结构 typedef struct{Node * p; int rvisited;}SNode //Node 是二叉树的结点结构,rvisited==1代表p所指向的结点的右结点已被访问过. lastOrderTraverse(BiTree bt){ //首先,从根节点开始,

  • C语言递归实现字符串逆序的方式详解

    C语言实现字符串逆序,具体内容如下所示: 一.迭代的方式实现 贴上代码:迭代的方式实现 '//字符串逆序:不可用字符串操作函数' #include <stdio.h> void swap(char* ch1, char* ch2) '//交换两个字符串' { char tmp = *ch1; *ch1 = *ch2; *ch2 = tmp; } int my_strlen(char* str) '//实现计算字符串字节数' { int count = 0; while (*str != '\0

  • C/C++ 双链表之逆序的实例详解

    C/C++ 双链表之逆序的实例详解 一.结点结构 双向链表的数据结构定义如下: typedef struct node { ElemType data; struct node *prior struct node *next; }list; 其中,ElemType可以是任意数据类型如int.float或者char等,在算法中,规定其默认为int类型. 二.带头结点 本文描述的是双向链表逆序,链表逆序需要维护3个指针,分别指向前一个节点.当前节点和下一个节点,具体代码如下: list *reve

  • PHP定义字符串的四种方式详解

    1.简介 在PHP中这门语言中,因为是弱类型语言,因此使用变量时不需提前定义即可使用. 我们在使用php进行开发的时候,大多数使用双引号.单引号进行定义字符串.既然有这两种方式,那么他们之间肯定是有区别的. 并且,除了单双引号定义字符串这两种方式外,php还增加了heredoc和nowdoc这两种语法糖进行补充. 2.单引号与双引号 2.1.单引号 在单引号中,任何特殊字符都会按原样输出[除\\.\'将会被转义输出] eg. <?php $var = 'this is a var!'; echo

  • Python拼接字符串的7种方式详解

    忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是处理字符串.相信不少同学会有同感. 几乎任何一种编程语言,都把字符串列为最基础和不可或缺的数据类型.而拼接字符串是必备的一种技能.今天,我跟大家一起来学习Python拼接字符串的七种方式. 1.来自C语言的%方式 print('%s %s' % ('Hello', 'world')) >>> Hello world %号格式化字符串的方式继承自古老的C语言,这在很多编程语言都有类似的实现.上例的%s是一个占位符,它仅代表

  • PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】

    本文实例总结了PHP字符串逆序排列实现方法.分享给大家供大家参考,具体如下: 关于字符串的逆序排列,最简单的使用PHP函数strrev()的测试代码如下: header('Content-type: text/html; charset=utf-8'); $str = implode('', range(9, 0)); print '< p><strong>Before reversed: </strong>'.$str.'< /p>'; print '&l

  • java递归法求字符串逆序

    本文实例讲述了java递归法求字符串逆序的方法.分享给大家供大家参考.具体实现方法如下: public static String reverseString(String x) { if(x==null || x.length()<2) return x; return reverseString(x.substring(1,x.length()))+ x.charAt(0); } 希望本文所述对大家的java程序设计有所帮助.

  • C/C++ 实现递归和栈逆序字符串的实例

    C/C++ 实现递归和栈逆序字符串的实例 递归函数调用模型 逆序方法 void revers(char *buf){ char *p = buf; if (p == NULL) { return; } //递归结束条件 if (*p == '\0') { return; } //递归调用 revers(p + 1); //在字符串的结尾追加n个字符 strncat(buf_g, p, 1); } 调用 int main(int argc, const char * argv[]) { char

  • c语言经典习题之逆序字符串详解

    目录 使用指针逆序字符串 使用递归逆序字符串 逆序带空格的字符串 总结 使用指针逆序字符串 思路: 给两个指针,left放在字符串左侧,right放在最后一个有效字符位置 交换两个指针位置上的字符 left指针往后走,right指针往前走,只要两个指针没有相遇,继续2,两个指针相遇后,逆置结束 void reverse_string(char* str) { char* left = str;//首元素 char* right = str + strlen(str) - 1;//最后一个元素 w

随机推荐