【每日一题】 将一句话单词倒置,标点不倒置

news2024/11/18 9:38:48

用C语言将一句话的单词倒置,标点不倒置。

比如输入: i like shanghai.

输出得到: shanghai. like i

这道题目有很多种做法,既可以用递归,也可以分成两部分函数来写,本文就详细来讲解分装为两个函数的做法。

思路:我们可以轻易实现一个字符串的倒置,可以先将整个字符串来倒置,然后再设置函数来倒序每一个单词,用空格作为区分每个单词的标志,这样下来就可以实现将一句话单词倒置,标点不倒置。

主函数如下所示。

int main()
{
	char s[100] = { 0 };
	gets_s(s);
	int start=0, end=strlen(s);
	reverse(start, end, s);
	reverse_word(start, end, s);
	printf("%s", s);
	return 0;
}

1.reverse函数的构建

首先构建reverse函数来实现整个字符串的逆转,只需创建一个中间变量即可。

void reverse(int start, int end, char s[])
{
	end--;
	while (start < end)
	{
		char tmp = s[start];
		s[start] = s[end];
		s[end] = tmp;
		start++;
		end--;
	}
}

需要注意的是,为了保证下标不在标点的位置,即为了不交换符号,end一定要-1。

如果不想再函数内部减一的话,可以在进行函数传参的时候减一。 

2.reverse_word函数的创建

接下来创建将每一个单词逆转的函数,我们使用两个while循环

外层循环的循环条件为while (s[end] != '\0'),当end的位置走到'\0'的位置时,循环结束。

内部的while循环是将end移位到一个单词的末尾,也就是空格的位置,与在开头的start共同将一个单词锁定,接着就可以再次调用上面的reverse函数实现单词的逆序。

要注意的是,单词的末尾可能是'\0',为了防止s[end]取到零值而导致函数提前结束,我们将不等于零值也变为循环的条件。

将一个单词逆序之后,我们将目标转换为下一个单词,先将end的值赋给start,再让end移位到下一个空格处,锁定第二个单词

void reverse_word(int start, int end, char s[])
{
	start = 0, end = 0;
	while (s[end] != '\0')
	{
		while (s[end] != ' '&&s[end]!='\0')
		{
			end+=1;
		}
		reverse(start, end, s);
		start = end+1;
		if(s[end]!='\0')
		end += 1;
	}
}

 完整代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

void reverse(int start, int end, char s[])
{
	end--;
	while (start < end)
	{
		char tmp = s[start];
		s[start] = s[end];
		s[end] = tmp;
		start++;
		end--;
	}
}
void reverse_word(int start, int end, char s[])
{
	start = 0, end = 0;
	while (s[end] != '\0')
	{
		while (s[end] != ' '&&s[end]!='\0')
		{
			end+=1;
		}
		reverse(start, end, s);
		start = end+1;
		if(s[end]!='\0')
		end += 1;
	}
}
int main()
{
	char s[100] = { 0 };
	gets_s(s);
	int start=0, end=strlen(s);
	reverse(start, end, s);
	reverse_word(start, end, s);
	printf("%s", s);
	return 0;
}

文章如果有问题的话,还请大佬们不吝赐教!

如果您觉得我写的不错,不妨点个赞支持一下哦~

 

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

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

相关文章

如何从0开始搭建Vue组件库

前言&#xff1a; 组件设计是通过对功能及视觉表达中元素的拆解、归纳、重组&#xff0c;并基于可被复用的目的&#xff0c;形成规范化的组件&#xff0c;通过多维度组合来构建整个设计方案&#xff0c;將这些组件整理在一起&#xff0c;便形成组件库。本文我们主要讲述基于 V…

微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

目录 一、高级篇 二、面试篇 实用篇 day05-Elasticsearch01 安装elasticsearch 1.部署单点es 2.部署kibana 一、高级篇 二、面试篇 实用篇 day05-Elasticsearch01 安装elasticsearch 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要…

高校房产管理系统用到了哪些技术?

数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解决方案。台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b…

【代码随想录训练营】【Day17】第六章|二叉树|110.平衡二叉树|257. 二叉树的所有路径|404.左叶子之和

平衡二叉树 题目详细&#xff1a;LeetCode.110 由题可知&#xff1a;一个平衡二叉树需要满足&#xff0c;其每个节点的左右两个子树的高度差的绝对值不超过 1 。 我们可以依照题意&#xff0c;直接来一波模拟&#xff1a; 利用层序遍历&#xff08;或其他遍历方法&#xff…

@所有人,OceanBase DevCon • 2023来啦

本文by&#xff1a;即将与大家见面的 OceanBase 2010 年&#xff0c;OceanBase 第一个版本诞生。在过去的十三年里&#xff0c;我们的产品技术&#xff0c;从支付宝走向众多企业&#xff0c;跟随着开源和云的成长&#xff0c;逐渐成为开发者喜欢的数据库。 2023 年 3 月 25 日…

MySQL的日志详解

目录 一.介绍 日志分类 二.错误日志 三.二进制日志—binlog 概述 日志格式 操作 四.查询日志 五.慢查询日志 一.介绍 在任何一种数据库中&#xff0c;都会有各种各样的日志&#xff0c;记录着数据库工作的方方面面&#xff0c;以帮助数据库管理员追踪数据库曾经发生过的…

IP路由基础

——IP路由基础&#xff08;IA&#xff09;—— ​​​​​​​HCIA全套笔记已经上线&#xff08;arpAAAvlanTrunk链路聚合vlan间通信ACL广域网技术以太网交换...........)_孤城286的博客-CSDN博客 目录 ——IP路由基础&#xff08;IA&#xff09;—— &#xff08;1&#…

【Debug】Centos 7 下部署 ElasticSearch 及 Kibana 时踩过的坑

Windows 电脑安装的 Centos 7 都是 X86_64版本, 但是 MAC 电脑 M1 芯片安装的是 arm 64 版本的 Centos 7, 这就导致有些镜像的安装可能会出现问题. 如果拉取速度比较慢, 修改镜像源, 如我的镜像源如下: 执行创建或修改镜像源指令: vim /etc/docker/daemon.json, 然后将下面的内…

【CMU15-445数据库】bustub Project #2:B+ Tree(上)

&#xff08;最近两个月学校项目有亿点忙&#xff0c;鸽得有点久&#xff0c;先来把 Project 2 补上&#xff09; 本节实验文档地址&#xff1a;Project #2 - BTree Project 2 要实现的是数据结构课上都会讲的一个经典结构 B 树&#xff0c;但是相信大多数的同学&#xff08;…

vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地

①首先下载 FileSaver.js 插件 npm install file-saver --save ②在需要的.vue页面引入 import { saveAs } from file-saver 在HTML中引入 <script src"https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> //Fil…

k8s 安装dashboard

前言 上一篇中将k8s简单部署安装上了&#xff0c;这篇接着安装下dashboard。 具体步骤 下载yaml文件 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml注意&#xff1a;这里使用的版本是v2.5.0&#xff0c;这个要和k8s的版…

褪去大厂光环下的功能测试,出去面试自动化居然一问三不知......不淘汰你淘汰谁呢

在一家公司待久了技术能力反而变弱了&#xff0c;原来的许多知识都会慢慢遗忘&#xff0c;这种情况并不少见。 一个京东员工发帖吐槽&#xff1a;感觉在大厂快待废了&#xff0c;出去面试问自己接口环境搭建、pytest测试框架&#xff0c;自己做点工太久都忘记了。平时用的时候…

CCF-CSP真题《202212-2 训练计划》思路+python题解

想查看其他题的真题及题解的同学可以前往查看&#xff1a;CCF-CSP真题附题解大全 试题编号&#xff1a;202212-2试题名称&#xff1a;训练计划时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 问题背景 西西艾弗岛荒野求生大赛还有 n 天开幕&#xf…

总结Anisble中的任务执行控制并练习

文章目录一、循环1.简单循环2.循环散列或字典列表二、条件三、触发器四、处理失败任务1.ignore_errors2.force_handlers3.changed_when4.failed_when5.block五、 练习建立大小为1500M名为/dev/sdb1的设备利用ansible循环安装且开启vsftpd&#xff0c;apache&#xff0c;dns&…

java8新特性【2023】

Lambda表达式 新的一套语法规则 是一个匿名函数 Testpublic void test1(){Runnable r1 new Runnable(){Overridepublic void run() {System.out.println("线程A");}};r1.run();System.out.println("");Runnable r2 () -> System.out.println("…

linux 安装rabbitmq 文档

1、下载rabbitMQ https://github.com/rabbitmq/rabbitmq-server/releases/tag/v3.9.15对应的erlang https://packagecloud.io/app/rabbitmq/erlang/search?distel%2F7https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.11-1.el7.x86_64.rpm?distro_ver…

Mysql | Error Code: 1153 - Got a packet bigger than ‘max_allowed_packet‘ bytes

描述 在执行sql语句插入的时候&#xff0c;报出了Error Code: 1153 - Got a packet bigger than ‘max_allowed_packet’ bytes 错误 解决方法 &#x1f6a9; 临时调整&#xff0c;重启后失效 1️⃣ 查询默认的max_allowed_packet值大小 执行语句&#xff1a; SHOW VARIABLE…

[Android Studio] Android Studio Virtual Device虚拟机的功能试用

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f680;write…

JS:构造函数和原型

目录 1.构造函数和原型 1.1 概述 1.2 构造函数 1.2.1创建 1.2.2 静态成员和实例成员 1.3 构造函数原型 prototype 1.4 对象原型_proto_ 1.5 constructor 构造函数 1.6 构造函数、实例、原型对象的关系 1.7 原型链 2. 继承 2.1 call() 1.构造函数和原型 1.1 概述 在…

OpenStack

名词解释RAM 身份验证管理SDN 软件定义网络虚拟化为什么openstack清一色的KVM&#xff1f;KVM属于redhat&#xff0c;开源可定制nentron实现SDNSDN实现了东西向流量管理&#xff08;VPC与VPC的流量管理&#xff09;SDNVXLan实现隧道网络&#xff08;对等连接&#xff09;SDN在公…