【C语言刷题】倒置字符串

news2024/9/22 9:51:38

解题思路与过程

  • 📽️解题思路
  • 📽️解题过程
    • 🔧1.输入
    • 🔧2.设计逆序函数
    • 🔧3.逆序整个字符串
    • 🔧4.逆序每个单词
  • 📽️源码

请添加图片描述
📷先来看题👇
在这里插入图片描述

📽️解题思路

🔴 首先我们定义一个字符数组来存放字符串,然后用 gets函数来读入字符串,接下来进行处理阶段,设计一个逆序函数逆序整个字符串,然后再逆序每个单词,最后处理一下细节再输出

📽️解题过程

🔧1.输入

定义完一个字符数组后,因为scanf不吃空格符和换行符,所以这里输入我们采用gets函数来进行读入字符串,看代码👇

int main()
{
	char arr[101] = { 0 };
	//输入
	gets(arr);

🔧2.设计逆序函数

看代码👇

void reverse(char* left, char* right)
{
	assert(*left != NULL);
	assert(*right != NULL);

	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}

☝️字符串的首尾元素逐个进行交换(不包括\0)☝️

因为传过来的是数组首元素地址,所以我们要用指针变量来接收,为了代码更谨慎,这里使用了assert断言,防止遇到空指针而导致程序运行错误(不能忘记引头文件<assert.h>)

🔧3.逆序整个字符串

	int len = strlen(arr);
	//逆序整个字符串
	reverse(arr, arr + len - 1);

👉我们使用strlen函数来计算字符串元素个数(不要忘记引头文件<string.h>),然后调用 reverse函数进行整个字符串的逆置。
👉这里的 arr + len - 1是首元素地址+字符串长度(整数)- 1 得到的是末尾元素的地址如果不 - 1指向的就是 ’\0‘了

🔧4.逆序每个单词

char* cur = arr;
	while (*cur)
	{
		//找一个单词
		char* start = cur;
		while (*cur != ' ' && *cur != '\0')
		{
			cur++;
		}
		reverse(start, cur - 1);
		if (*cur == ' ')
		{
			cur++;
		}
	}

👉定义一个指针变量cur来接收逆序整个字符串之后的arr数组首元素地址,然后如果cur指向的字符不是’\0’的话就进入循环,然后再定义一个指针变量start来接收每个单词的首元素地址,然后进入循环判断如果cur指向的不是空格或者’\0’就往后跳一个字符,直到cur指向的是空格或者’\0‘了,就说明已经遍历完确认了一个单词,然后进入reverse函数 来逆序单词(cur - 1 是因为如果不 -1,cur指向的是空格或者’\0‘
👉最后如果cur指向的是空格而不是’\0‘就说明还没有结束,还有单词没有逆序完,往后跳一个字符循环继续

👉最后打印输出

📽️源码

#include<stdio.h>
#include<string.h>
#include<assert.h>

void reverse(char* left, char* right)
{
	assert(*left != NULL);
	assert(*right != NULL);

	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[101] = { 0 };
	//输入
	gets(arr);
	//处理
	int len = strlen(arr);
	//逆序整个字符串
	reverse(arr, arr + len - 1);
	//逆序每个单词
	char* cur = arr;
	while (*cur)
	{
		//找一个单词
		char* start = cur;
		while (*cur != ' ' && *cur != '\0')
		{
			cur++;
		}
		reverse(start, cur - 1);
		if (*cur == ' ')
		{
			cur++;
		}
	}
	//打印
	printf("%s\n", arr);

	return 0;
}

🥰希望大家能够理解!

总结🥰
本文章旨在【C语言刷题】专栏,感兴趣的烙铁可以订阅本专栏哦🥳🥳🥳
希望我们可以做一个用心的人💕💕💕
小的会继续学习,继续努力带来更好的作品😊😊😊
创作写文不易,还多请各位大佬uu们多多支持哦🥰🥰🥰

请添加图片描述

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

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

相关文章

【验证码的识别】—— 图形验证码的识别

前言 &#xff08;结尾有彩蛋欧&#xff09; 目前&#xff0c;许多网站采取各种各样的措施来反爬虫&#xff0c;其中一个措施便是使用验证码。随着技术的发展&#xff0c;验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码&#xff0c;后来加入了英文字母和混…

RK356x U-Boot研究所(命令篇)3.6 fdt命令的用法

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、fdt命令的配置二、fdt命令的定义三、fdt命令的用法3.1 fdt list3.2 fdt rm3.3 fdt set一、fdt命令的配置 .config配置文件需要有以下配置: rk3568_defconfig默认已使能。 二、fdt命令的定义 usb命令定义在cm…

169、【动态规划】leetcode ——123. 买卖股票的最佳时机 III:二维数组+一维数组 (C++版本)

题目描述 原题链接&#xff1a;123. 买卖股票的最佳时机 III 解题思路 &#xff08;1&#xff09;二维dp数组 动态规划五步曲&#xff1a; &#xff08;1&#xff09;dp数组含义&#xff1a; dp[i][0]&#xff0c;表示无操作。主要由四个状态来表示四种操作。dp[i][1]&…

博客系统web自动化测试

目录 一、项目简介 二、测试用例 三、测试过程 3.1 环境搭建 3.2 编写代码 3.2.1 博客登陆页面测试 3.2.2 博客列表页面测试 3.2.3 博客详情页面测试 3.2.4 博客编辑页面测试 四、测试评估 一、项目简介 本项目是一个简易的个人博客系统&#xff0c;用户可以在登陆后…

W800开发板|SDK| HLK-W800-KIT-PRO|工具链|本地命令行编译|Windows11|WSL|(5)、海凌科W800开发板命令行编译指南

概况 海凌科W800开发板&#xff08;HLK-W800-KIT&#xff09;是海凌科电子面向开发者针对联盛德W800 芯片推出的一款多功能开发板。全功能版本与联盛德W800开发板相比&#xff0c;增加了温湿度传感器、RGB 灯以及音频解码器、功放可以直接在开发版验证功能。联盛德W800的csdk也…

java虚拟机内存分布

java虚拟机内存分布 Java虚拟机在执行java程序的过程中会把它所管理的内存划分为如下若干个不同的数据区域。 1.程序计数器 程序计数器是线程私有的&#xff0c;它占用的空间相对较小&#xff0c;用来记录当前线程字节码执行到哪一步。字节码解释器通过改变这个计数器的值来获…

Portraiture2023最新版人像图像后期处理软件

2023全新发布Portraiture 4是专注于图像后期处理软件研发的 Imagenomic, LLC产品之一&#xff0c;在摄影爱好者中有点影响力。Portraiture可以将繁琐复杂的人像磨皮操作极致简化&#xff0c;不论是普通爱好者或专业后期处理人员&#xff0c;均能一键完成。凭借优秀的AI算法和多…

uniapp 悬浮窗(应用内、无需授权) Ba-FloatWindow2

简介&#xff08;下载地址&#xff09; Ba-FloatWindow2 是一款应用内并且无需授权的悬浮窗插件。支持多种拖动&#xff1b;自定义位置、大小&#xff1b;支持动态修改。 支持自动定义起始位置支持自定义悬浮窗大小支持贴边显示支持多种拖动方效果&#xff1a;不可拖动、任意…

python--matplotlib(1)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库&#xff0c;需要numpy库的支持&#xff0c;支持用户方便设计出二维、三维数据的图形显示。 正文 1.arange函数 arange函数需要三个参数&#xff0c;分别为起始点、终止…

MyBatisPlus ---- 多数据源

MyBatisPlus ---- 多数据源1. 创建数据库及表2. 引入依赖3. 配置多数据源4. 创建用户service5. 创建商品service6. 测试适用于多种场景&#xff1a;纯粹多库、读写分离、一主多从、混合模式等 目前我们就来模拟一个纯粹多库的一个场景&#xff0c;其他场景类似 场景说明&#x…

一文了解Hotspot虚拟机下JAVA对象从创建到回收的生命周期

Java虚拟机是Java的核心和基础&#xff0c;他是Java编译器和操作系统平台之间处理器&#xff0c;能实现跨平台运行Java程序。本文主要讲解的是虚拟机如何管理对象&#xff0c;即Java对象在JVM虚拟机中被创建到回收的流程 Java对象从创建到回收的生命周期对象创建流程1.类加载检…

MyBatis 的一级、二级缓存机制

目录标题缓存什么是缓存为什么使用缓存什么样的数据能使用缓存&#xff0c;什么样的数据不能使用适用于缓存不适用于缓存MyBatis 一级缓存、二级缓存关系1. 一级缓存1.1 什么是一级缓存mybatis1.2 一级缓存配置1.3 什么情况下会命中一级缓存mybatis清除一级缓存的几种方法1.4 内…

Delphi 10.4.2使用传统代码提示方案(auto complete)(转)

Delphi 10.4重点是实现了LSP&#xff0c;但现在最新的10.4.2还是不成熟&#xff0c;无法满足日常需要&#xff0c;不过没关系&#xff0c;可以设置为原有的方案&#xff0c;如下图&#xff1a;具体操作&#xff1a;Tools->Options->Editor->language->Code Insight…

迷宫问题图解 : 基于骨架提取、四邻域

目录 1. 迷宫的连通域 2. How to remove branch &#xff1f; 3. 基于4邻域的 remove 分支 3.1 找到分支的端点 3.2 4邻域的 remove 分支 3.3 循环移除分支 3.4 code 4. 迷宫路线 4.1 预处理 4.2 提取骨架 4.3 分支的端点 4.4 去除分支的端点 4.5 循环去除分支 4…

Java-合并两个链表

每日一题 Java-合并两个链表 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。 请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0c;并将list2 接在被删除节点的位置。 下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果…

linux下redis安装 及常用命令

安装及常用命令 redis的yum方式安装 先查看是否已经安装redis执行命令 rpm -qa | grep redis如果存在&#xff0c;将存在的卸载&#xff1a;(-y 代表自动选择) yum remove xxx -y在线安装redis yum install redis安装本地已经下载好的redis安装包 yum localinstall redis6.2…

基于Spring、Spring MVC、MyBatis的招聘管理系统

文章目录项目介绍主要功能截图&#xff1a;首页账户管理招聘建议部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 …

流程引擎之Camunda简介

背景Camunda 是支持 BPMN&#xff08;工作流和流程自动化&#xff09;、CMMN&#xff08;案例管理&#xff09; 和 DMN&#xff08;业务决策管理&#xff09; java 框架。Camunda 基于Activiti5 保留了 PVM&#xff0c;其开发团队也是从 activiti 中分裂出来的。Camunda 来自拉…

KubeSphere实战

文章目录一、KubeSphere平台安装1、Kubernetes上安装KubeSphere1.1 安装docker1.2 安装Kubernetes1.3 前置环境之nfs存储1.4 前置环境之metrics-server1.5 安装KubeSphere2、Linux单节点部署KubeSphere3、Linux多节点部署KubeSphere(推荐)二、KubeSphere实战1、多租户实战2、中…

Spring中的数据校验--进阶

分组校验 场景描述 在实际开发中经常会遇到这种情况&#xff1a;添加用户时&#xff0c;id是由后端生成的&#xff0c;不需要校验id是否为空&#xff0c;但是修改用户时就需要校验id是否为空。如果在接收参数的User实体类的id属性上添加NotNull&#xff0c;显然无法实现。这时…