牛客网刷题 ——C语言初阶(6指针)——倒置字符串

ops/2025/1/13 12:25:04/

1. 题目描述:倒置字符串

牛客网OJ题链接

描述
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

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

示例1
输入:
I like beijing.
输出:
beijing. like I

2. 思路

一开始的思路我想着再创建一个数组str2存放我们倒置的字符串,我尝试倒着遍历源数组str1 然后判断第一个空格的地方 将beijing赋值给str2,但是到第二个单词like ,我耗费了蛮多时间,都没办法确定它的结束地址,
因为对于beijing 我是从发现的第一个空格,一直遍历到str1字符串结尾,把这个整体赋值给str2,但是对于like 单词我只能确定它的起始位置,我没有办法确定它的结束位置。

之后在网上看了下才发现原来还有这样的巧妙思路:

先把整个字符串整体逆序,然后再将每个单词逆序
单词逆序的时候需要确定单词的起始位置和结束位置
start初值是我们的数组首元素地址
更新的时候我们判断是否是空格,空格-1位置就是我们第一个单词的结尾,空格+1就是下一个单词的起始位置

示例
在这里插入图片描述

3. 代码实现

#include <stdio.h>
#include<assert.h>void reserveStr(char* left, char* right) {assert(left && right);while (left < right) {char tem = *left;*left = *right;*right = tem;left++;right--;}
}int main() {char str[100] = { 0 };gets(str);int size = strlen(str);char* left = str;char* right = str + size - 1;reserveStr(left, right);char* cur = str;char* start = cur; //我们需要确定每个单词的起始位置start和结束位置cur// 这个start初始就是我们的数组首地址,start在循环中要随时更新,//我们每次走到空格的时候就记录了单词的结束位置就是cur-1//下一个单词就是空格+1的位置while (*cur != '\0') {if (*cur == ' ') {reserveStr(start, cur - 1);start = cur + 1;}cur++;if(*cur =='\0')//最开始我没有考虑到这个if,在牛客网验证的时候发现最后一个单词没有逆置//然后反应过来,最后一个单词的结尾是'\0',所以我们结尾单词需要另外考虑{reserveStr(start, cur - 1);}}printf("%s", str);return 0;
}

在这里插入图片描述

4.代码实现2

和1的思路类似,但是有些许不同
这个是判断如果不是空格或者不是’\0’,我们就cur++

#include <stdio.h>
#include <string.h>
#include <assert.h>void reverse(char* left, char* right) {assert(left && right);while (left < right) {char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}int main() {char arr[100] = { 0 };//输入gets(arr);int len = strlen(arr);//完成这个逆序//1. 逆序整个字符串reverse(arr, arr + len - 1);//逆序每个单词char* cur = arr;while (*cur) {char* start = cur;while (*cur != ' ' && *cur != '\0') {cur++;}reverse(start, cur - 1);if (*cur != '\0')cur++;}//打印printf("%s\n", arr);return 0;
}

http://www.ppmy.cn/ops/149729.html

相关文章

js单例模式

保证一个类只有一个实例,并提供一个访问它的全局访问点 实现 静态方法实现 class SingleTon{//全局的访问点static getInstance(){// 保证一个类只有一个实例if(!this.instance){this.instancenew SingleTon()}return this.instance}}let aSingleTon.getInstance()let bSing…

怎样提高服务器中的数据传输速度?

服务器中的数据传输速度会影响着用户的体验感&#xff0c;当企业中的数据传输速度出现卡顿或者是过慢时&#xff0c;用户不能及时浏览到所需的内容&#xff0c;给用户造成不好的体验感&#xff0c;那么企业该怎样才能提高服务器中的数据传输速度呢&#xff1f; 服务器之间如何传…

CES Asia 2025科技盛宴,AI智能体成焦点

2025第七届亚洲消费电子技术展&#xff08;CES Asia赛逸展&#xff09;将在北京拉开帷幕&#xff0c;AI智能体有望成为展会的核心亮点。 深圳市人工智能行业协会发文表示全力支持CES Asia 2025&#xff08;赛逸展&#xff09;&#xff0c;称其为人工智能领域的创新发展提供了强…

数据分析思维(十一):应用篇——用数据分析解决问题

此前篇章&#xff1a; 数据分析思维&#xff08;一&#xff09;&#xff1a;业务指标&#xff08;数据分析并非只是简单三板斧&#xff09; 数据分析思维&#xff08;二&#xff09;&#xff1a;分析方法——5W2H分析方法、逻辑树分析方法、行业分析方法 数据分析思维&#…

ElasticSearch 同义词匹配

synonym.txt 电脑, 计算机, 主机 复印纸, 打印纸, A4纸, 纸, A3 平板电脑, Pad DELETE /es_sku_index_20_20250109 PUT /es_sku_index_20_20250109 {"settings": {"index": {"number_of_shards": "5","number_of_replicas&quo…

深入理解 HTTP 的 GET、POST 方法与 Request 和 Response

HTTP 协议是构建 Web 应用的基石&#xff0c;GET 和 POST 是其中最常用的请求方法。无论是前端开发、后端开发&#xff0c;还是接口测试&#xff0c;对它们的深入理解都显得尤为重要。在本文中&#xff0c;我们将介绍 GET 和 POST 方法&#xff0c;以及 Request 和 Response 的…

李宏毅机器学习课程笔记03 | 类神经网络优化技巧

文章目录 类神经网络优化技巧局部最小值local minima 与 鞍点saddle pointSaddle Point 的情况更常见 Tips for training&#xff1a;Batch and MomentumSmall Batch vs Large Batch回顾&#xff1a;optimization优化 找到参数使L最小问题&#xff1a;为什么要用Batch&#xff…

Python Selenium库入门使用,图文详细。附网页爬虫、web自动化操作等实战操作。

文章目录 前言1 创建conda环境安装Selenium库2 浏览器驱动下载&#xff08;以Chrome和Edge为例&#xff09;3 基础使用&#xff08;以Chrome为例演示&#xff09;3.1 与浏览器相关的操作3.1.1 打开/关闭浏览器3.1.2 访问指定域名的网页3.1.3 控制浏览器的窗口大小3.1.4 前进/后…