字符串逆序不一样的解法(递归)
目录
- ✨常规解法
- ✨不一样的解法(递归)
前言
前段时间在做题的时候,看见一题字符串逆置的题目,刚开始我寻思着这不挺简单的吗?
我咔咔开始写,后来发现题目要求居然要我用递归求解!!
题目描述:
编写一个函数 reverse_string(char * string)(递归实现)
不能使用C函数库中的字符串操作函数
那时刚学完C语言函数,只是短短认识了几个递归求解的题目。我滴亲娘,该怎么搞呀!而且它只能有一个参数!!
没办法了,当时只能找教程了,现在我就再复刻一下当时的题目,教大家如果用递归逆置字符串!
下面第一个是我当时写的常规解法:
✨常规解法
常规解法就是用left指向第一个下标,用right指向倒数一个下标,将第一个和倒数第一个交换,然后移动左右下标,再将第二个和倒数二个交换…直到 left=right就结束
void reverse_string(char* arr)
{char *left = arr;char *right = arr+strlen(arr)-1;while(left<right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}
✨不一样的解法(递归)
学的递归解法:
递归思想就是大事化小:要逆置/abcdef
可以转变成 先逆置:/bcde\
然后再变成逆置/cd
…
例如“abcdef”第一次进去就是首先要求字符串长度,找到最后一个,然后先把它存储起来,再把最后一个位置的元素置成“\0”;再把下一个元素的指针传给这个函数,下一次进去就变成“bcde”,
之后就再重新求字符串长度,再把最后一个字符存储起来,把最后一个位置成“\0”,
继续重复以上步骤直到字符长小于2就停止
然后嘞在调完递归后依次把字符交换即可要注意题目要求是不能用C语言库函数,所以不能使用strlen来求字符串长度,但是我们可以自己模仿实现一个my_strlen求字符串长度
代码实现>
//计算字符串长度
int my_strlen(char* p)
{int count = 0;while (*p != '\0'){count++;p++;}return count;
}
//逆置字符串
void reverse_string(char* p)
{int len = my_strlen(p); char tem = *(p + len - 1);*(p + len - 1) = '\0';if (my_strlen(p + 1) >= 2){reverse_string(p + 1);}*(p + len - 1) = *p;*p = tem;}
字符串逆序不一样的解法(递归)相关推荐
- C语言简单递归实现字符串逆序输出
题目内容的 "注意" 已经侧面规定了要用递归来实现: 输入是一个可能含有空格的串说明要用gets来读入字符串,如果利用scanf的话是无法读入一段含有空格的串. 下面先上一般方法: ...
- 信息学奥赛一本通 1162:字符串逆序
[题目链接] ybt 1162:字符串逆序 [题目考点] 1. 字符串 2. 递归 [解题思路] 先去掉字符串末尾的'!' 递归输出逆序字符串 递归问题:输出字符串s的逆序字符串 递归关系:设字符串s ...
- 华为机考HJ13句子逆序C语言弱智解法
华为机考HJ13句子逆序C语言弱智解法 句子逆序C语言低端解法,易于理解. 1.收数据老生常谈. 2.将句子全部逆序. 3.将单词正序. (这里有一个bug,最后一个词(原句子第一个词)总是收不到,所 ...
- 字符串面试题(一)字符串逆序
字符串逆序可以说是最经常考的题目.这是一道入门级的题目,相信80%的程序员经历过这道题.给定一个字符串s,将s中的字符顺序颠倒过来,比如s="abcd",逆序后变成s=" ...
- 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略
编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 目录 字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 ...
- 字符串逆序的几种方法
普通逆序 char* Reverse(char* s) {//将q指向字符串最后一个字符char* q = s ;while( *q++ ) ;q -= 2 ; //分配空间,存储逆序后的字符串.ch ...
- c语言指针字符串逆序存放,C语言指针实现字符串的反转
题目要求: 编写程序:从键盘任意输入一个字符串,输出该字符串. 然后,将该字符串逆序存放后再输出,要求用字符指针完成. 代码: //解法一 #include #include int main() { ...
- 信息学奥赛一本通(1162:字符串逆序)
1162:字符串逆序 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14027 通过数: 10525 [题目描述] 输入一串以'!'结束的字符,按逆序输出 ...
- c语言对字符串逆序,【C语言】 字符串逆序
[C语言] 字符串逆序 字符串逆序有多种办法,下面我们分方法而论: // 非递归实现字符串反转: char *reverse(char *str) { if( !str ) { return NULL ...
最新文章
- gulp-rev:项目部署缓存解决方案----gulp系列(六)
- 以下哪一个不属于python语言的特点-Python语言的特点有哪些
- 如何在三年内快速成长为一名技术专家
- go语言中变量的定义和使用
- 企业参加HVV的防守思路总结
- Vue、React 之间如何实现代码移植?
- Spring 基于注解的配置
- uva 1613——K-Graph Oddity
- python查看图像通道数(通过PIL)
- 接收POst数据流数据
- debian下,下载linux内核
- 如何使用RDP报表工具预览页面可以出现完整数据而不是只显示一条
- 航摄像片生成DSM(Pix4d)2021.5.21
- mysql 数据库数据恢复 库被删了怎么恢复数据库
- 发现了一个好用的艺术字体转换器,也太方便了吧
- 使用NoSQLBooster for MongoDB连接远程服务器
- Valve在Game Dev Conference上,OUYA上的1000场比赛等等
- 一个关于意念(脑电波)的想法
- 微信小程序 数组 Json 导出到excel
- 面试官:来写个代码求一下两个数的最大公约数吧