C语言——小细节和小知识12

一、倒置句子

将句子中的单词位置倒置,标点不用倒置,例如i love you.倒置结果是:you. love i。

1、两步翻转法

采用两步翻转法来实现单词位置的倒置。首先,它整体翻转整个字符串,然后再逐个翻转每个单词内的字符。

#include <stdio.h>
#include <string.h>void ReverseString(char* ptr)
{char temp = '\0';int length = (int)strlen(ptr);int i = 0,j = 0;for (i = 0,j = length - 1; i < length / 2; i++,j--){temp = *(ptr + j);*(ptr + j) = *(ptr + i);*(ptr + i) = temp;}for (i = 0,j = 0; i < length; i++){j = i;while (*(ptr + j) != ' ' && j < length){j++;}int WordEnd = j - 1;while (i < WordEnd){temp = *(ptr + i);*(ptr + i) = *(ptr + WordEnd);*(ptr + WordEnd) = temp;i++;WordEnd--;}i = j;}
}int main()
{char arr[10001] = { '\0' };fgets(arr, 10001,stdin);ReverseString(arr);printf("%s\n", arr);return 0;
}

工作流程:

  1. 函数定义

    • void ReverseString(char* ptr):这是一个自定义函数,接收一个字符串指针ptr作为参数,旨在反转该字符串中单词的顺序。
  2. 变量声明和初始化

    • temp:用于字符交换的临时变量。
    • length:通过调用strlen(ptr)得到输入字符串的长度。
    • ij:作为索引变量在字符串操作中使用。
  3. 第一个for循环:整体翻转字符串

    • 这个循环负责将整个字符串从头到尾翻转。通过交换指针ptr指向的首尾两端的字符,利用索引i从头开始,索引j从尾开始,直到它们相遇在字符串的中间。
  4. 第二个for循环:翻转单词内的字符

    • 在字符串被整体反转之后,这个循环的目的是将每个单词内部的字符顺序重新翻转到正确的顺序。
    • i从字符串的开始位置遍历,j用来查找单词的结尾(即空格字符或字符串的末尾)。
    • WordEnd是找到的单词的末尾索引。
    • 当内部的while循环开始时,iWordEnd用来交换单词内部的字符,直到单词被翻转到其原始顺序。
  5. main函数

    • arr:一个足够大的字符数组,用来存储用户通过gets_s函数输入的字符串。
    • gets_s(arr, 10001):安全地读取用户输入的字符串。gets_s是一个安全版本的函数,用于避免缓冲区溢出,第二个参数表示最大的字符串长度。
    • ReverseString(arr):调用前面定义的ReverseString函数,传入用户输入的字符串arr
    • printf("%s\n", arr):打印经过单词顺序翻转后的字符串。

运行结果:

2、倒读翻转法

从字符串的最后读取字符串内容,用两个数组存储,将原数组从尾部读取到首部,把单词一个个填入新数组中。

#include <stdio.h>
#include <string.h>void ReverseString(char* ptr1, char* ptr2)
{int len = strlen(ptr1);ptr1 += len;while (len > 0){while (*(ptr1) != ' ' && len > 0){if (len != 1){ptr1--;}len--;}char* ptr3 = NULL;if (len > 0){ptr3 = ptr1 + 1;}else{ptr3 = ptr1;}while (*(ptr3) != ' ' && *(ptr3) != '\0'){*ptr2++ = *ptr3++;}if (len > 0){*ptr2++ = ' ';ptr1--;if (len != 1){len--;}}}
}int main()
{char arr1[100] = { '\0' };char arr2[100] = { '\0' };fgets(arr1, 100,stdin);ReverseString(arr1, arr2);printf("%s\n", arr2);return 0;
}

主要函数 ReverseString 进行详细分析:

  1. 首先获取输入字符串 ptr1 的长度,并将指针移动到字符串的末尾。

  2. while 循环开始迭代,每次循环都是处理字符串中的一个单词。

  3. 内部的 while 循环负责找到单词的开始位置。它通过回退解析字符串,直到找到一个空格,这表示一个单词的结束。特别注意,如果长度为1,指针不回退,这处理了字符串开头的特殊情况,即第一个单词是一个字母的情况,例如第一个单词是I。

  4. 一旦找到空格或者到达字符串的开始,指针 ptr3 被设置为当前单词的第一个字符。

  5. 接下来的 while 循环将当前单词复制到输出字符串 ptr2 中。该循环依次复制字符,直到遇到空格或字符串终止符 \0 ,循环结束后这个单词完成复制。

  6. 如果还没有处理完所有字符(len > 0),在 ptr2 中添加一个空格以分隔单词,并将 ptr1 指针再次回退一个字符以找到下一个单词的结束。

  7. 这个过程不断重复,直到处理完所有的字符(即 len 为0)。

  8. main 函数中,通过 gets_s 函数从用户那里接受一个字符串。然后调用 ReverseString 函数处理这个字符串,并将结果打印出来。

运行结果:

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

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

相关文章

redis安装-Linux为例

可以下载一个Shell或者MobaXterm工具&#xff0c;便于操作 在redis官网下载压缩包 开始安装 安装依赖 yum install -y gcc tcl切换目录 切换目录后直接把redis安装包拖到/user/local/src/下 cd /user/local/src/解压然后安装 #解压 tar -zxvf redis-7.2.4.tar.gz #安装 …

day13

1.多态的向上转型和向下转型向上转型&#xff1a; 父类的引用指向子类的对象Person person new Man();向下转型: 将父类的引用强转为子类的对象Man man (Man) person; 2.instanceof关键字的用法引用 intanceof 运行类型 3.抽象类声明方式abstract class Person {} 4.接…

python数字图像处理基础(六)——模板匹配、直方图

目录 模板匹配概念单对象模板匹配多对象模板匹配 直方图1.查找直方图2.绘制直方图3.掩膜的应用 模板匹配 概念 模板匹配和卷积原理很像&#xff0c;模板在原图像上从原点开始滑动&#xff0c;计算模板与图像被模板覆盖的地方的差别程度&#xff0c;这个差别程度的计算方法在o…

如何安装“Nextcloud 客户端”win10系统?

1、 下载 Nextcloud的官网 Download and install Nextcloud 2、安装 3、 Nextcloud登录

组件v-model(.sync)记录使用(vue3)

示例&#xff08;演示地址&#xff09; 以下是Vue3中使用v-model实现组件的双向数据绑定的示例代码&#xff1a; 首先&#xff0c;让我们来了解一下Vue3中v-model的用法。在Vue3中&#xff0c;v-model 指令可以用于自定义组件上&#xff0c;用于实现组件的双向数据绑定。与Vue2…

Alinx ZYNQ 7020 LED调试--in RAM

设置拨码开关为JTAG方式 烧写LED bit stream a. 点击“Program device”烧录程序到FPGA中&#xff08;重新上电程序就丢失了&#xff09; b. /01_led/led.runs/impl_1/led.bit 程序烧录到Flash中 ZYNQ与以往的直接烧录Flash不同&#xff0c;首先必须PS&#xff0c;然后烧…

spring-boot定时任务

org.springframework.boot jar包 内置定时任务注解 。生成定时任务有 * * * * * &#xff1f; 表示秒分时日月周。 日和周的位置 必须某个位置用&#xff1f;代替*号用于区别。 定时任务规则&#xff1a;0 * * * &#xff1f; * * 表示任意月的任意周的每天的每时的每分…

抖音矩阵云混剪系统源码(免授权版)多平台多账号一站式管理,附带系统搭建教程

搭建教程 MySQL 5.6 PHP 7.2 Apache 数据库名称 juzhen Nginx环境切换伪静态 1、解压安装包到项目根目录&#xff0c;找到application/database.php 更换自己的数据库密码 2、阿里云现有的配置不要动 其他按照文档进行添加 3、项目访问目录&#xff1a;public 4、域名…

Demo: 实现PDF加水印以及自定义水印样式

实现PDF加水印以及自定义水印样式 <template><div><button click"previewHandle">预览</button><button click"downFileHandle">下载</button><el-input v-model"watermarkText" /><el-input v-mo…

敏捷开发之Scrum

敏捷开发是什么 我们一般习惯用瀑布模型&#xff0c;它以文档为驱动&#xff0c;将软件生命周期划分为固定的六个基本活动&#xff0c;并且规定了它们自上而下、相互衔接的次序&#xff0c;如同瀑布流水&#xff0c;逐级下落。 那什么是敏捷开发呢&#xff1f; ​ 敏捷开发的核…

代码随想录算法训练营第五天| 总结数组专题

数组&#xff1a;二分查找、双指针&#xff08;包括快慢指针&#xff09;、滑动窗口、模拟 链表&#xff1a;双指针、三指针、虚拟头指针、复杂指针操作画图明确每一步&#xff08;标好次序&#xff09; 数组 代码随想录总结的很好&#xff0c;如下图。我再结合自己的一些理解…

AI 的未来是开源的

想象一下&#xff0c;在未来&#xff0c;人工智能不会被锁在公司的金库里&#xff0c;而是由全球创新者社区一砖一瓦地在开放中构建的。协作&#xff0c;而不是竞争&#xff0c;推动进步&#xff0c;道德考虑与原始绩效同等重要。这不是科幻小说&#xff0c;而是人工智能发展核…

C++I/O流——(4)格式化输入/输出(第二节)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 含泪播种的人一定能含笑收获&#xff…

73.网游逆向分析与插件开发-背包的获取-物品数据的初步数据分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;72.网游逆向分析与插件开发-背包的获取-项目需求与需求拆解-CSDN博客 然后首先找切入点&#xff1a; 通过药物来当切入点&#xff0c;药物比较好使用&#xff0c;然后鼠标放到药物上它有名字、种类、…

【分布式技术】分布式存储ceph之RGW接口

目录 1、对象存储概念 2、创建 RGW 接口 //在管理节点创建一个 RGW 守护进程 #创建成功后默认情况下会自动创建一系列用于 RGW 的存储池 #默认情况下 RGW 监听 7480 号端口 //开启 httphttps &#xff0c;更改监听端口 #更改监听端口 ​ //创建 RadosGW 账户 …

【Go学习】macOS+IDEA运行golang项目,报command-line-arguments,undefined

写在前面的话&#xff1a;idea如何配置golang&#xff0c;自行百度 问题1&#xff1a;通过idea的terminal执行go test报错 ✘ xxxxxmacdeMacBook-Pro-3  /Volumes/mac/.../LearnGoWithTests/hello  go test go: go.mod file not found in current directory or any parent …

【LeetCode热题100】【子串】和为 K 的子数组

题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,…

Jet Brains 2023 开发者生态系统现状

一、前言 今天刷到Jet Brains官方发布了2023 开发者生态系统现状&#xff0c;这个相信大家都不陌生&#xff0c;我们的开发工具IDEA就是它旗下的。 分析的蛮不错的&#xff0c;今天整理一下&#xff0c;和大家一起分享。 有想法大家可以一起交流一下哈&#xff01; 有兴趣的…

unity SqLite读取行和列

项目文件 链接&#xff1a;https://pan.baidu.com/s/1BabHvQ-y0kX_w15r7UvIGQ 提取码&#xff1a;emsg –来自百度网盘超级会员V6的分享 using System.Collections; using System.Collections.Generic; using UnityEngine; using Mono.Data.Sqlite; using System; using Syste…