递归是会更秀strtok

前几天发的字符串反转题目,后面有一个新同学用了递归的方法来实现,看了下,真的是很秀。

之前字符串反转的题目

代码如下

#include "stdio.h"
#include "string.h"
char input[] = {"the sky is blue cris 1212321 apple"};void reverse(char *s,char *delim) { char* temp = strtok(s,delim);if(temp != NULL) {reverse(NULL,delim);printf("%s ",temp); }
}int main() { printf("%s\n",input); reverse(input," ");return 0;
}

strtok是一个字符串分割函数,但是这个函数估计很多人还不明白他的用法。

strtok函数解释

char *strtok(char s[], const char *delim)

把输入的字符串s分解成为一组字符串。

delim 为分割字符串,注意这里是字符串。

首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL

例如:

#include "stdio.h"
#include "string.h"
char input[] = {"the sky is blue cris 1212321 apple"};int main() {char *temp = NULL; printf("%s\n",input); temp = strtok(input," ");printf("input=%s,temp=%s\n", input, temp);temp = strtok(NULL," ");printf("input=%s,temp=%s\n", input, temp);return 0;
}
372d40f1c2cb5d94894a6393297e47c6.png

头文件

#include<string.h>

使用详细说明

  • 开始

strtok 找到需要分割的字符串delim后,会把这个delim设置成\0 ,这从上面的实例也可以看出来,分割之后,我们再用printf输出会在第一个分割字符串位置停止输出。

  • 结束

当字符串查找到末尾时,函数会返回NULL,所以我们可以用NULL来判断函数执行是否结束。

  • 注意

用这个函数处理之后会破坏原来字符串中的内容,第一次分割之后,原字符串s是分割完成之后的第一个字符串。

strtok函数源码

char *
strtok_apple(register char *s,register const char *delim)
{register char *spanp;register int c, sc;char *tok;static char *last;if (s == NULL && (s = last) == NULL)return (NULL);/** Skip (span) leading delimiters (s += strspn(s, delim), sort of).*/
cont:c = *s++;for (spanp = (char *)delim; (sc = *spanp++) != 0;) {if (c == sc)goto cont;}if (c == 0) {  /* no non-delimiter characters */last = NULL;return (NULL);}tok = s - 1;/** Scan token (scan for delimiters: s += strcspn(s, delim), sort of).* Note that delim must have one NUL; we stop if we see that, too.*/for (;;) {c = *s++;spanp = (char *)delim;do {if ((sc = *spanp++) == c) {if (c == 0)s = NULL;elses[-1] = 0;last = s;return (tok);}} while (sc != 0);}/* NOTREACHED */
}

解释下上面的代码

#include "stdio.h"
#include "string.h"
char input[] = {"the sky is blue cris 1212321 apple"};void reverse(char *s,char *delim) { char* temp = strtok(s,delim);if(temp != NULL) {reverse(NULL,delim);printf("%s ",temp);//第一次调用的时候会最后输出,最后一次调用不等于空的时候最先输出 }
}int main() { printf("%s\n",input); reverse(input," ");return 0;
}

如果递归理解不是很明白,可以用for来输出看看

#include "stdio.h"
#include "string.h"
char input[] = {"the sky is blue cris 1212321 apple"};int main() {char * output[1024]; int len = 0; printf("%s\n",input);char* temp = strtok(input," "); for (len=0;temp!=NULL;temp = strtok(NULL," "),++len) {output[len] = temp;}for(;len--;) {printf("%s ", output[len]);}return 0;
}
1e3fafe1d75fe753815b52278b256386.png

3dd1809b725e5684d6cfde13ee9bc856.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios开发网络篇—HTTP协议 - 转

一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) &#xff0c;通过1个URL&#xff0c;能找到互联网唯一的1个资源 &#xff0c;URL就是资源的地址&#xff0c;位置&#xff0c;互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP&#…

总结的一些内存问题

前言之前在实习时&#xff0c;听了 OOM 的分享之后&#xff0c;就对 Linux 内核内存管理充满兴趣&#xff0c;但是这块知识非常庞大&#xff0c;没有一定积累&#xff0c;不敢写下&#xff0c;担心误人子弟&#xff0c;所以经过一个一段时间的积累&#xff0c;对内核内存有一定…

云计算-从基础到应用架构系列-云计算的演进

为什么80%的码农都做不了架构师&#xff1f;>>> 开篇 本篇是主要讲述云计算的发展历程&#xff0c;由于云计算本身提出来也不是太久&#xff0c;并且其实云计算也是经过前人的一些经验总结提出&#xff0c;所以我们对之前的一 些计算机的发展史有个一定的了解&…

这样理解mmap,挺有意思!

大概雍正皇帝怎么也不会想到&#xff0c;自己在西历2022年的男生和女生眼里&#xff0c;会是截然不同的两种形象。1以我对身边同学朋友的观察&#xff0c;男生们大多爱看《雍正王朝》&#xff0c;他们眼中的雍正&#xff0c;大约是个推行了“火耗归公”、“摊丁入亩”等遏制贪腐…

软件开发中的11个系统思维定律

为什么80%的码农都做不了架构师&#xff1f;>>> http://sd.csdn.net/a/20101217/284119.html?1292550154 彼得圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。 1. 今日的问题源于昨日的解决方案&#xff08;Today’s problems come from yes…

为什么我对流程情有独钟?

写这个标题的原因是我有一个同事兼朋友&#xff0c;他的名字刚好和流程谐音&#xff0c;最近他刚离职回苏州工作&#xff0c;在球场下&#xff0c;他是我的良师益友&#xff0c;在球场上&#xff0c;他是我们可以信任的队友&#xff0c;我们不仅一次把比我们高大、速度比我们快…

基于boost asio实现的支持ssl的通用socket框架

情景分析现已存在一个可用稳定的异步客户端类http_client_base&#xff0c;该类基于boost asio实现了连接服务器&#xff0c;发送请求&#xff0c;获取响应和解析http数据等操作&#xff0c;该类的大致实现框架如下1classhttp_client_base 2{ 3public: 4 http_client_ba…

C#创建简单的验证码

首先&#xff0c;创建一个CLASS类&#xff0c;然后需要add Reference的方式添加 System.Drawing&#xff08;画画的类&#xff09; 方法代码如下&#xff1a; 1/**//**//**//// <summary> 2 /// 定义显示的随机字符 3 /// </summary> 4 /// &…

昨天的事情想说一下

发那篇文章的目的昨天发文章之后&#xff0c;我的一个好朋友微信找我&#xff0c;跟我说了很多关于文章的事情&#xff0c;所以&#xff0c;我自己也思考了许多。关于泄愤这个事情&#xff0c;我还是挺想说的。可能很多人看到了一个不好的东西&#xff0c;然后网上发发这个&…

Multidimensional Queries(二进制枚举+线段树+Educational Codeforces Round 56 (Rated for Div. 2))...

题目链接&#xff1a; https://codeforces.com/contest/1093/problem/G 题目&#xff1a; 题意&#xff1a; 在k维空间中有n个点&#xff0c;每次给你两种操作&#xff0c;一种是将某一个点的坐标改为另一个坐标&#xff0c;一种操作是查询[l,r]中曼哈顿距离最大的两个点的最大…

poj 3342

概率dp&#xff0c;不解释。 View Code #include<iostream>#include<map>#include<cstdio>#include<vector>using namespace std;const int maxn201;int dp[210][2];vector<int>edge[maxn];void dfs(int u,int p){int i,j; dp[u][1]1;dp[u][…

最全是一次I2C总结

博主将 I2C spec 文章总结为一篇&#xff0c;目录如下I2C Introduction I2C Architecture I2C Transfer I2C Synchronization And Arbitration I2C Hs-mode1、I2C Introduction1、I2C 历史I2C&#xff1a;Inter-Integrated Circuit&#xff0c;集成电路总线。I2C 是 Philips 公…

Lync Server 2010标准版系列PART6:启用Lync

在我们花费了众多的精力和时间之后&#xff0c;我们终于完成了Lync Server标准版的搭建&#xff0c;接下来当然是为我们AD中的用户启用Lync&#xff0c;来看下我们的部署成果。首先我们需要在AD中创建两个帐户&#xff0c;这样便于我们后期的测试&#xff0c;在DC上打开AD用户和…

8位MCU跑RTOS有没有意义?

相信大多数人在学习单片机的时候&#xff0c;都是从最基本的8位MCU开始的。一般来说&#xff0c;8位单片机最常见的是三个系列是&#xff1a;51系列、AVR系列、PIC系列。而前段时间&#xff0c;群里讨论了一个问题&#xff1a;在51单片机上跑RTOS有没有意义&#xff1f;关于这个…

ViewState机制由浅入深1

1 ViewState机制是什么&#xff1f; ViewState机制是asp.net中对同一个Page的多次请求&#xff08;PostBack&#xff09;之间维持Page及控件状态的一种机制。在WebForm中每次请求完&#xff0c;Page对象都会被释放&#xff0c;对同一个Page的多次请求之间的状态信息&am…

关于bc中小数点length,scale,(())以及进制转换

这是我在codewar上遇到的一个题&#xff0c;我用我自己的方法做出了解答&#xff0c;如下&#xff1a; 1 #!/bin/bash2 3 distanceecho "$1*10000"|bc|cut -d"." -f14 a05 n16 7 if [ $distance -le 0 ];then8 echo None9 else 10 while [ $n -lt $di…

5V串口接3.3V单片机串口怎么搞?

写在前面&#xff1a;两个单片机由于电平不同&#xff0c;串口通信可能会失败&#xff0c;这时候需要通过电平转换电路来解决&#xff0c;本文给出了两种方法&#xff0c;一种是通过三极管搭建&#xff0c;另一种是MOS管搭建&#xff0c;在硬件工程师的笔试中也经常会出现这样的…

Django之缓存、信号和图片验证码

一、 缓存 1、 介绍 缓存通俗来说&#xff1a;就是把数据先保存在某个地方&#xff0c;下次再读取的时候不用再去原位置读取&#xff0c;让访问速度更快。 缓存机制图解 2、Django中提供了6种缓存方式 1. 开发调试   2. 内存   3. 文件   4. 数据库   5. Memcache缓存&…

这焊接技术在班里排名第一没问题吧?

晚上和朋友讨论PCB LAYOUT&#xff0c;然后自己也动手起来了&#xff0c;刚好看到宇哥的一篇焊接的文章&#xff0c;这焊接技术这么厉害的人&#xff0c;layout那不得是吊炸天啊。作者&#xff1a;晓宇&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xf…

Yocto,嵌入式开发者不可不知的强大工具【附资料与活动】

各个嵌入式开发团队出于不同的原因&#xff0c;都希望构建适合自己开发需求的嵌入式系统。Yocto正是这样一个工具&#xff0c;任何一个厂商都可以根据Yocto定制属于自己的系统。 Yocto 是什么 Yocto 是一种伞式项目&#xff0c;侧重于通过开放式嵌入内核&#xff0c;打造嵌入式…