递归是会更秀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,一经查实,立即删除!

相关文章

判断输入的IP地址是否合法

判断输入的IP地址是否合法&#xff0c;ip地址的值在0~255之间&#xff0c;先把输入的IP的地址转换为一个字符串。 #define LEN (sizeof(xx)/sizeof(xx[0])) const char *xx[] {"192.168.1.1", "10.0.0.1", "127.256.0.1", "iugerjiogjioe…

偶作无题词一首

偶作无题词一首 读史籍&#xff0c;捉摸当初元璋。谈兴衰&#xff0c;寻思后来泽东。展抱负&#xff0c;携智巧&#xff0c;弄权谋&#xff0c;兴武功&#xff0c;万邦惊诧。立业不立身&#xff0c;立言不立行&#xff0c;枭雄本色。搏四海&#xff0c;威肃九州&#xff0c;建基…

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;所以我们对之前的一 些计算机的发展史有个一定的了解&…

Linux下的基本常用命令解析

1.查进程ps命令查找与进程相关的PID号&#xff1a;ps a 显示现行终端机下的所有程序&#xff0c;包括其他用户的程序。ps -A 显示所有程序。ps c 列出程序时&#xff0c;显示每个程序真正的指令名称&#xff0c;而不包含路径&#xff0c;参数或常驻服务的标示。ps -e 此参数的效…

常用数据库脚本

SqlServer&#xff1a;1、修改数据库排序规则&#xff0c;改成中文方式(如果是英文方式的话&#xff0c;直接写insert插入中文会有问题的&#xff0c;需要使用insert into Table_1 values(N中文)的方式)Alter database master COLLATE Chinese_PRC_CI_AS;修改之后对于这个库中的…

这样理解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…

boost.asio防止恶意空连接的方法

转载&#xff1a;http://blog.csdn.net/educast/article/details/13167847 网络服务器通常要应对一些意外情况&#xff0c;如空连接行为&#xff0c;指在遇到客户端连接后不进行任何操作&#xff0c;并很可能在大量空连接情况下导致服务器资源耗尽而无法工作。以下代码主要工作…

赢在中国 (2008-3-19)

赢在中国又换在10点&#xff0c;前面几分钟没有看到。虽然我一直不看好32号老董&#xff0c;但是我还是很好奇看看他是怎么样让自己又一次成为众人的对立面的。 我觉得32号和04号都不是心胸宽广之辈&#xff0c;但至少04号比32号真诚&#xff0c;只是他还没有修炼到32号的厚厚的…

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

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

UVa-401-Palindromes(回文)

这一题的话我们可以把映像字符的内容给放入一个字符串常量里面&#xff0c;然后开辟一个二维的字符串常量数组&#xff0c;里面放置答案。 对于回文实际上是很好求的&#xff0c;对于镜像的话&#xff0c;我们写一个返回char的函数&#xff0c;让它接收一个char。 接收之后进行…

C#中获取当前时间:System.DateTime.Now.ToString()用法

//2008年4月24日System.DateTime.Now.ToString("D");//2008-4-24System.DateTime.Now.ToString("d"); //2008年4月24日 16:30:15System.DateTime.Now.ToString("F");//2008年4月24日 16:30System.DateTime.Now.ToString("f"); //2008-…

基于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 公…