目录

  1. ✨常规解法
  2. ✨不一样的解法(递归)

前言

前段时间在做题的时候,看见一题字符串逆置的题目,刚开始我寻思着这不挺简单的吗?

我咔咔开始写,后来发现题目要求居然要我用递归求解!!

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

字符串逆序不一样的解法(递归)相关推荐

  1. C语言简单递归实现字符串逆序输出

    题目内容的 "注意" 已经侧面规定了要用递归来实现: 输入是一个可能含有空格的串说明要用gets来读入字符串,如果利用scanf的话是无法读入一段含有空格的串. 下面先上一般方法: ...

  2. 信息学奥赛一本通 1162:字符串逆序

    [题目链接] ybt 1162:字符串逆序 [题目考点] 1. 字符串 2. 递归 [解题思路] 先去掉字符串末尾的'!' 递归输出逆序字符串 递归问题:输出字符串s的逆序字符串 递归关系:设字符串s ...

  3. 华为机考HJ13句子逆序C语言弱智解法

    华为机考HJ13句子逆序C语言弱智解法 句子逆序C语言低端解法,易于理解. 1.收数据老生常谈. 2.将句子全部逆序. 3.将单词正序. (这里有一个bug,最后一个词(原句子第一个词)总是收不到,所 ...

  4. 字符串面试题(一)字符串逆序

    字符串逆序可以说是最经常考的题目.这是一道入门级的题目,相信80%的程序员经历过这道题.给定一个字符串s,将s中的字符顺序颠倒过来,比如s="abcd",逆序后变成s=" ...

  5. 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略

    编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 目录 字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略 ...

  6. 字符串逆序的几种方法

    普通逆序 char* Reverse(char* s) {//将q指向字符串最后一个字符char* q = s ;while( *q++ ) ;q -= 2 ; //分配空间,存储逆序后的字符串.ch ...

  7. c语言指针字符串逆序存放,C语言指针实现字符串的反转

    题目要求: 编写程序:从键盘任意输入一个字符串,输出该字符串. 然后,将该字符串逆序存放后再输出,要求用字符指针完成. 代码: //解法一 #include #include int main() { ...

  8. 信息学奥赛一本通(1162:字符串逆序)

    1162:字符串逆序 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 14027     通过数: 10525 [题目描述] 输入一串以'!'结束的字符,按逆序输出 ...

  9. c语言对字符串逆序,【C语言】 字符串逆序

    [C语言] 字符串逆序 字符串逆序有多种办法,下面我们分方法而论: // 非递归实现字符串反转: char *reverse(char *str) { if( !str ) { return NULL ...

最新文章

  1. gulp-rev:项目部署缓存解决方案----gulp系列(六)
  2. 以下哪一个不属于python语言的特点-Python语言的特点有哪些
  3. 如何在三年内快速成长为一名技术专家
  4. go语言中变量的定义和使用
  5. 企业参加HVV的防守思路总结
  6. Vue、React 之间如何实现代码移植?
  7. Spring 基于注解的配置
  8. uva 1613——K-Graph Oddity
  9. python查看图像通道数(通过PIL)
  10. 接收POst数据流数据
  11. debian下,下载linux内核
  12. 如何使用RDP报表工具预览页面可以出现完整数据而不是只显示一条
  13. 航摄像片生成DSM(Pix4d)2021.5.21
  14. mysql 数据库数据恢复 库被删了怎么恢复数据库
  15. 发现了一个好用的艺术字体转换器,也太方便了吧
  16. 使用NoSQLBooster for MongoDB连接远程服务器
  17. Valve在Game Dev Conference上,OUYA上的1000场比赛等等
  18. 一个关于意念(脑电波)的想法
  19. 微信小程序 数组 Json 导出到excel
  20. 面试官:来写个代码求一下两个数的最大公约数吧

热门文章

  1. eft and spin
  2. PyTorch实现非极大值抑制(NMS)
  3. c++类和对象(类的概念)
  4. 第九章 动态规划-1278:【例9.22】复制书稿(book)
  5. VueDemo-21 确认订单
  6. 视频转换成gif动图的方法步骤
  7. 【CSS面试题】—CSS实现三角形
  8. Java 比较日期/时间的大小
  9. (三十)AO和GO剖析
  10. PyQt5入门学习(一)【PyQt5及PyQt5-tools的安装】