【C语言题解】将一句话的单词进行倒置,标点不倒置。

题目描述:将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。

文章目录

  • 原题目
    • 题目描述:
    • 输入描述:
    • 输出描述:
    • 题目链接:
  • 整体思路
  • 分步实现
    • 1. 输入字符串
    • 2. 逆序功能
    • 3. 整句话逆序
    • 4. 单词逆序
    • 5. 整体代码和oj结果
  • 写在最后

原题目

题目描述:

将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。
字符串长度不超过100。

输入描述:

输入一个仅包含小写字母、空格、‘.’ 的字符串,长度不超过100。
‘.’ 只出现在最后一个单词的末尾。

输出描述:

依次输出倒置之后的字符串,以空格分割。

题目链接:

https://www.nowcoder.com/questionTerminal/8869d99cf1264e60a6d9eff4295e5bab

整体思路

先将整句话逆序处理,然后再将每个单词进行逆序,这样一来整句话的顺序虽然颠倒了,但是单词因为逆序了两次,还是正常顺序。

分步实现

1. 输入字符串

利用gets函数输入获取整句话的字符串。

#include <stdio.h>
int main()
{char arr[100];gets(arr);//和scanf函数类似,获取键盘输入的字符printf("%s", arr);//测试是否获取到了return 0;
}

编译结果:
image.png

2. 逆序功能

自定义写一个reverse函数,利用指针来逆序字符串的内容,之所以写成函数是因为这个功能需要复用。
利用数组在栈区中存放时,下标由小到大,地址由低到高存放的原理,判断其首元素地址和末位元素的地址,如果左边的地址小于右边,使用指针进行元素交换,并且左边指针++,右边指针–,重新进行循环判断,直到左边大于等于右边,则跳出循环,这样就可以完成字符串的逆序操作。

#include<string.h>
void reverse(char* left, char* right)
{char tmp;while (left < right){tmp = *left;*left = *right;*right = tmp;left++;right--;}
}

3. 整句话逆序

利用strlen函数,求得字符串长度,就可以利用reverse函数将首元素地址,和首元素地址加字符串长度减一,将整句话逆序。

#include <stdio.h>
int main()
{char arr[100];gets(arr);int len = strlen(arr);reverse(arr, arr + len - 1);//传入首元素地址和末位元素地址printf("%s\n", arr);//测试用return 0;
}

编译结果:
image.png

4. 单词逆序

利用指针来判断是否遇到了空格或者\0,没有遇到的话,指针向前走,如果遇到了,就将之前的内容逆序一次,直到指针走到\0,跳出循环。

int main()
{char arr[100];gets(arr);int len = strlen(arr);reverse(arr, arr + len - 1);char* cur = arr;//cur作为光标遍历整个字符串并进行判断char* start = arr;//start作为每个单词的第一个元素地址指针用while (*cur){while (*cur != ' ' && *cur != '\0'){cur++;//不是空格或者\0,指针就向前走}reverse(start, cur - 1);//将这个单词的开头和末位地址传入reverse进行逆序start = cur + 1;//start去指向新单词的开头if (*cur != '\0')//直到*cur(数组元素)等于\0时,cur(指针)停止++,并且在while循环处跳出循环(因为\0就是0,为假){cur++;}}printf("%s\n", arr);//打印字符串return 0;
}

编译结果:
image.png

5. 整体代码和oj结果

#include <stdio.h>
#include<string.h>void reverse(char* left, char* right)
{char tmp;while (left < right){tmp = *left;*left = *right;*right = tmp;left++;right--;}
}int main()
{char arr[100];gets(arr);int len = strlen(arr);reverse(arr, arr + len - 1);char* cur = arr;char* start = arr;while (*cur){while (*cur != ' ' && *cur != '\0'){cur++;}reverse(start, cur - 1);start = cur + 1;if (*cur != '\0'){cur++;}}printf("%s\n", arr);return 0;
}

image.png

写在最后

如果本文对您有帮助,可不可以给我一个小小的点赞呀❤~您的支持是我最大的动力。

博主小白一枚,才疏学浅,难免有所纰漏,欢迎大家讨论和提出问题,博主一定第一时间改正。

谢谢观看嘿嘿(๑•̀ㅂ•́)و✧~!

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

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

相关文章

react-dnd的使用

介绍&#xff1a; React DnD&#xff08;Drag and Drop&#xff09;是一个用于实现拖放功能的 React 拓展库。它提供了一组用于构建可拖动和可放置组件的高阶组件和钩子函数。 使用&#xff1a; 安装 react-dnd 和 react-dnd-html5-backend&#xff1a; npm install react-d…

leetcode算法题--判断是否能拆分数组

原题链接&#xff1a;https://leetcode.cn/problems/check-if-it-is-possible-to-split-array/ 一开始思路想错了。。导致浪费很多时间 其实只要能找到存在一个子数组&#xff0c;子数组长度为2&#xff0c;这个子数组符合条件就一定能拆分。。 func canSplitArray(nums []i…

selenium教程

selenium教程 Selenium爬虫 linux系统下如何部署selenium爬虫程序 Python程序员&#xff0c;你还在用selenium吗&#xff1f;试试Playwright吧

【数模】主成分分析PCA

主成分分析(Principal Component Analysis,PCA)&#xff0c;是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息。使用场景&#xff1a;一般…

jupyter文档转换成markdown

背景 上一篇文章**《如何优雅地用python生成模拟数据》**我就使用jupyter写的&#xff0c;这个真的是万能的&#xff0c;可以插入markdown格式的内容&#xff0c;也可写代码&#xff0c;关键是像ipython一样&#xff0c;可以分步执行。 我可以这样自由的写我的博客内容&#x…

linux 安装go 1.18版本

首先去官网找到对应的版本 直接下载下来&#xff08;如果服务器可以直接访问到go 官网也可以wget直接下载到服务器&#xff09; 然后把该包上传到linux 的/usr/local 目录下 然后直接解压安装该包&#xff1a; sudo tar -C /usr/local -zxvf go1.18.10.linux-amd64.tar.gz 然…

设计模式行为型——观察者模式

目录 什么是观察者模式 观察者模式的实现 观察者模式角色 观察者模式类图 观察者模式举例 观察者模式代码实现 观察者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式…

【工程优化问题】基于多种智能优化算法的压力容器设计问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ES6学习-Class类

class constructor 构造方法 this 代表实例对象 方法之间不需要逗号分隔&#xff0c;加了会报错。 typeof Point // "function" Point Point.prototype.constructor // true类的数据类型就是函数&#xff0c;类本身就指向构造函数。 类的所有方法都定义在类的pr…

VMware16.2.5版本虚拟机克隆服务步骤(图解版)

目录 一、VMware16.2.5版本虚拟机克隆服务具体步骤二、VMware16.2.5版本虚拟机克隆服务后如何配置静态ip 一、VMware16.2.5版本虚拟机克隆服务具体步骤 1.1、先停止需要克隆的服务&#xff0c;选中需要克隆的服务——>鼠标右键选择【电源】——>【关闭客户机】&#xff…

【Linux升级之路】5_基础IO

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux升级之路】 ✒️✒️本篇内容&#xff1a;文件操作&#xff0c;文件管理&#xff0c;重定向&#xff0c;简易shell添加重定向功能&#xff0c;文件属…

骑士牛(BFS)

题面 john用他的一头母牛和Don先生交换了一头“骑士牛”。这头牛有一个独特的能力——在牧场中能像中国象棋中的马一样跑跳&#xff08;会中国象棋吗&#xff1f;不会&#xff1f;注意&#xff1a;本题不考虑马被“蹩脚”的情况&#xff09;。 当然&#xff0c;这头牛不能跳到岩…

python接口自动化之正则用例参数化

前言 ​ 我们在做接口自动化的时候&#xff0c;处理接口依赖的相关数据时&#xff0c;通常会使用正则表达式来进行提取相关的数据。 ​ 正则表达式&#xff0c;又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(Regular Expression&#xff0c;在代码中常简写…

【搜索框的匹配功能】

功能需求&#xff1a; 1. 输入关键字的同时&#xff0c;以下拉列表的形式显示匹配的内容&#xff1b; 2. 点击下拉列表的选项&#xff0c;跳转到对应的新的页面 注意&#xff1a;这里读取data.txt&#xff08;检索的文件对象&#xff09;&#xff0c;会存在跨域的问题&#x…

ImportError: No module named pkg_resources

ImportError: No module named pkg_resources 当使用 pip 命令时&#xff0c;如果出现 ImportError: No module named pkg_resources 错误&#xff0c;通常表示你的 Python 环境中缺少了 setuptools 模块或该模块损坏。 解决此问题的一种方法是重新安装或升级 setuptools 模块…

瞅一眼nginx

目录 &#x1f9ac;什么是nginx? &#x1f9ac;nginx配置官方yum源&#xff1a; &#x1f9ac;nginx优点 &#x1f9ac;nginx 缺点 &#x1f9ac;查看nginx默认模块 &#x1f40c;nginx新版本的配置文件&#xff1a; &#x1f40c;nginx目录索引 &#x1f40c;nginx状态…

Echarts图表Java后端生成Base64图片格式,POI写入Base64图片到Word中

Echarts图表Java后端生成请看上篇&#xff0c;此篇为Base64图片插入Word文档中Java后台生成ECharts图片,并以Base64字符串返回_青冘的博客-CSDN博客 try {XWPFParagraph xwpfParagraphimage doc.createParagraph(); // 创建图片段落xwpfParagraphimage.setAlignment(Paragraph…

【C++】开源:ceres和g2o非线性优化库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍ceres和g2o非线性优化库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

IT 基础架构自动化

什么是 IT 基础架构自动化 IT 基础架构自动化是通过使用技术来控制和管理构成 IT 基础架构的软件、硬件、存储和其他网络组件来减少人为干预的过程&#xff0c;目标是构建高效、可靠的 IT 环境。 为什么要自动化 IT 基础架构 为客户和员工提供无缝的数字体验已成为企业的当务…