C语言指针的初级练习

前言

从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。


提示:文章作者为初学者,有问题请评论指正,感谢。

哥们嗷 不知道你和我是否一样在学习C语言指针的时候也是脑壳晕,但是没办法啊 找工作需要嘛,只有学喽,今天给大家带来的是C语言指针的初级练习,为啥不是高级呢,因为高级的我也不会嗷。废话不多说 看看题目。

题目:字符串反转 编写一个函数 reverseString,它接受一个字符串作为参数,并在不使用任何内置函数的情况下将其反转。函数应该返回一个指向反转后的字符串的指针。

先给一个框架 照着往里面填就可以了嗷 哥们 看看你会不会。

#include <stdio.h>// 函数声明
char* reverseString(char* str);int main() {char inputStr[] = "Hello, World!";char* reversedStr = reverseString(inputStr);printf("反转后的字符串是: %s\n", reversedStr);// 注意:这里可能需要处理原字符串被修改的问题return 0;
}// reverseString函数定义
char* reverseString(char* str) {// 这里填写你的代码,实现字符串反转的逻辑// 提示:你可能需要使用两个指针,一个在字符串的开始,一个在结束// 然后交换这两个指针所指向的字符,并向中间移动,直到它们相遇return str; // 返回反转后的字符串
}

ok看到这里你就去敲吧 我们老师说建议初学者还是用vim敲代码 说是要熟悉/Linux下面的操作,也为后面的笔试打基础,因为它没提示嘛,你写的时候。

那好喽 下面我们就开始解这道题目了。

首先,让我们理解题目要求:编写一个函数 reverseString,它接受一个字符串作为参数,并将其反转,然后返回一个指向反转后的字符串的指针。

要解决这个问题,我们需要考虑以下几个步骤:

  1. 找到字符串的末尾:我们需要知道字符串在哪里结束,这样我们才能从两头开始交换字符。
  2. 交换字符:我们需要一种方法来交换字符串开始和结束位置的字符。
  3. 移动指针:在每次交换后,我们需要将指针向中间移动,直到它们相遇或交错。

现在,让我们开始第一步。你能想到如何找到一个字符串的末尾吗?哥们提示你嗷:在C语言中,所有的字符串都是以特定的字符结束的。你知道是哪个字符吗?

答案是\0你复制一下就看得到答案了 或者你凑近点看 哈哈哈哈哈哈哈)。

那现在我们知道了如何找到字符串的末尾,下一步是交换字符。在开始交换之前,我们需要两个指针:一个指向字符串的开始,另一个指向字符串的末尾(但不包括空字符 '\0')。你能想出如何初始化这两个指针吗?

提示:一个指针可以直接指向字符串的第一个字符,另一个指针需要遍历字符串直到找到空字符。

如果你不会的话那咱们就一步一步来。如果你会的话 就直接跳到最后 去看答案喽。

首先,我们要创建一个指针 start 指向字符串的第一个字符,这很简单,因为字符串名本身就是指向第一个字符的指针。所以我们可以这样做:

char* start = str;

接下来,我们需要另一个指针 end 来找到字符串的末尾。我们可以通过一个循环来实现,循环会一直进行,直到找到空字符 '\0'。这个循环可以这样写:

char* end = str;
while (*end != '\0') {end++;
}
end--; // 回退一个字符,因为最后的位置是空字符

现在 start 指向字符串的开始,end 指向字符串的最后一个字符。下一步是交换 start 和 end 指向的字符,并向中间移动这两个指针,直到它们相遇或交错。

你能想到如何交换两个字符吗?

提示:你可以使用一个临时变量来保存一个字符,然后将第二个字符赋值给第一个字符的位置,最后将保存在临时变量中的字符赋值给第二个字符的位置。这就是一个简单的交换操作。

现在我们来进行交换操作。我们已经有了指向字符串开始和结束的指针 start 和 end。接下来,我们需要在 start 和 end 相遇之前,不断交换它们所指向的字符。

这里是一个简单的交换逻辑:

  1. 创建一个临时变量来存储 start 指向的字符。
  2. 将 end 指向的字符赋值给 start 指向的位置。
  3. 将临时变量中的字符(原来 start 指向的字符)赋值给 end 指向的位置。
  4. 将 start 向前移动一位,将 end 向后移动一位。

这个过程可以用以下代码表示:

while (start < end) {char temp = *start; // 步骤1: 存储start指向的字符*start = *end;     // 步骤2: 将end的字符赋值给start*end = temp;       // 步骤3: 将temp的字符赋值给endstart++;           // 步骤4: start向前移动end--;             // 步骤4: end向后移动
}

接下来的话 我们就只需要返回反转周的字符串喽

return str;

那就完美嗷 就搞定了 下面把所有的代码组合在一起 你看看你自己拼的到一起不。

#include <stdio.h>
// 函数声明
char* reverseString(char* str);
int main() {char inputStr[] = "Hello, World!";char* reversedStr = reverseString(inputStr);printf("反转后的字符串是: %s\n", reversedStr);return 0;
}
// reverseString函数定义
char* reverseString(char* str) {// 首先,我们需要找到字符串的末尾char *start = str;char *end = str;while (*end != '\0') {++end;}--end; // 因为最后的位置是空字符,所以我们需要回退一个字符// 然后,我们交换start和end指向的字符,直到它们相遇或者交错while (start < end) {// 交换操作char temp = *start;*start = *end;*end = temp;// 移动指针++start;--end;}return str; // 返回反转后的字符串
}

这个就是是输出结果喽 哥们 你搞定没有。

 

总结

以上就是今天要讲的内容,本文仅仅简单讲解了一下C语言指针的一个小练习,祝愿你我的朋友在学习的路上一帆风顺,也祝愿我会成为一个优秀的嵌入式工程师。 

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

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

相关文章

【ZZULI数据结构实验】压缩与解码的钥匙:赫夫曼编码应用

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

使用 Docker 部署 TaleBook 私人书籍管理系统

1&#xff09;项目介绍 GitHub&#xff1a;https://github.com/talebook/talebook Talebook 是一个简洁但强大的私人书籍管理系统。它基于 Calibre 项目构建&#xff0c;具备书籍管理、在线阅读与推送、用户管理、SSO 登录、从百度/豆瓣拉取书籍信息等功能。 友情提醒&#x…

工业交换机外壳材质大比拼,看看哪种外壳适合你

在工业领域里&#xff0c;交换机就像我们的网络心脏&#xff0c;时刻跳动着确保信息畅通无阻。而它的外壳&#xff0c;就是保护这颗“心脏”的铠甲。今天&#xff0c;咱们就来聊聊这些铠甲——工业交换机外壳的材质和防护等级&#xff0c;看看它们如何守护我们的网络世界。 首…

网络编程基础回顾

计算机网络&#xff08;5&#xff09;&#xff1a;运输层 OSI 模型与 TCP/IP 协议 OSI七层协议模型 (open system interconnection) 应用层&#xff1a;为应用数据提供服务表示层&#xff1a;数据格式转化&#xff0c;数据加密会话层&#xff1a;建立、维护和管理会话传输层&…

算法设计与分析 动态规划/回溯

1.最大子段和 int a[N]; int maxn(int n) {int tempa[0];int ans0;ansmax(temp,ans);for(int i1;i<n;i){if(temp>0){tempa[i];}else tempa[i];ansmax(temp,ans);}return ans; } int main() {int n,ans0;cin>>n;for(int i0;i<n;i) cin>>a[i];ansmaxn(n);co…

【吃透Java手写】4-Tomcat-简易版

【吃透Java手写】Tomcat-简易版-源码解析 1 准备工作1.1 引入依赖1.2 创建一个Tomcat的启动类 2 线程池技术回顾2.1 线程池的使用流程2.2 线程池的参数2.2.1 任务队列&#xff08;workQueue&#xff09;2.2.2 线程工厂&#xff08;threadFactory&#xff09;2.2.3 拒绝策略&…

财务管理|基于SprinBoot+vue的财务管理系统(源码+数据库+文档)

财务管理系统 目录 基于SprinBootvue的财务管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 1管理员功能模块 2员工功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1…

视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷

在数字化时代&#xff0c;视频剪辑已经成为了一项常见且重要的技能。无论是制作家庭影片、工作展示还是社交媒体内容&#xff0c;掌握高效的视频剪辑技巧都能极大地提升我们的工作效率和创作质量。本文将为您介绍云炫AI智剪中高效的视频批量剪辑方法&#xff0c;让您能够一键合…

在线教程|图灵奖得主Yann LeCun盛赞!小红书开源InstantID,一张原图即可定制多种风格写真

不久前&#xff0c;一群来自小红书的 95 后工程师联合北大团队发布了开源项目「InstantID」&#xff0c;只需上传一张照片&#xff0c;这款 AI 写真神器就能轻松定制多种风格的 AI 写真&#xff0c;告别繁琐修图。 InstantID 一经发布就引起了广泛关注&#xff0c;GitHub 收藏量…

Java实现的网上书店系统(附带完整源码)

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者 实现技术:JSP技术;javaBean;servlet;MySql数据库。 系统功能结构图 该系统为MVC结构,它的运行环境分客户端、应用服务器端和数据库服务器端三部分 书店系统需求分析: 通过…

通用人工智能AGI,究竟是一个哲学问题还是技术问题?

引言 在探索人工智能的未来方向中&#xff0c;人工通用智能&#xff08;AGI&#xff09;的概念逐渐成为科技领域和哲学探讨的焦点。AGI旨在创建可以执行任何智能任务的机器&#xff0c;甚至在某些方面超越人类的能力。然而&#xff0c;关于AGI的研究不仅仅是技术问题&#xff…

天龙怀旧游戏python脚本

设置图&#xff1a; 游戏窗口最大化。 海贼洞这里定位你要回点的定位。 运行bat就行&#xff0c;脚本出错了还是会重新运行脚本&#xff0c;运行自动启动&#xff0c;end暂停脚本&#xff0c;home重新启动脚本 1. 我常用的是内挂回点脚本&#xff0c; 下面都是前台脚本&…

数据结构与算法学习笔记六-二叉树的顺序存储表示法和实现(C语言)

目录 前言 1.数组和结构体相关的一些知识 1.数组 2.结构体数组 3.递归遍历数组 2.二叉树的顺序存储表示法和实现 1.定义 2.初始化 3.先序遍历二叉树 4.中序遍历二叉树 5.后序遍历二叉树 6.完整代码 前言 二叉树的非递归的表示和实现。 1.数组和结构体相关的一些知…

【React】React-redux多组件间的状态传递

效果&#xff08;部分完整代码在最底部&#xff09;&#xff1a; 编写 Person 组件 上面的 Count 组件&#xff0c;已经在前面几篇写过了&#xff0c;也可以直接翻到最底部看 首先我们需要在 containers 文件夹下编写 Person 组件的容器组件 首先我们需要编写 index.jsx 文件…

基于VOLOPV2的自动驾驶环境感知系统

基于VOLOPV2的自动驾驶环境感知系统是一个复杂的系统&#xff0c;它主要负责实时检测并识别周围环境中的各种物体和信息&#xff0c;为自动驾驶车辆提供必要的感知数据。以下是对该系统的一个简要介绍&#xff1a; 环境感知是自动驾驶系统中的一个关键部分&#xff0c;它依赖于…

AI代理和AgentOps生态系统的剖析

1、AI代理的构成&#xff1a;AI代理能够根据用户的一般性指令自行做出决策和采取行动。 主要包含四个部分&#xff1a; &#xff08;1&#xff09;大模型&#xff08;LLM&#xff09; &#xff08;2&#xff09;工具&#xff1a;如网络搜索、代码执行等 &#xff08;3&#x…

C++学习第二十九课:C++ 输入输出流详解:从基础到高级应用

在 C 中&#xff0c;流&#xff08;stream&#xff09;是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动&#xff0c;这些字节可以从一个地方流向另一个地方&#xff0c;例如从键盘输入到程序中&#xff0c;或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…

区块链(打新)如何被割韭菜

看上去&#xff0c;像我只要去每个都买一遍新发行的代币&#xff0c;一定可以成功的 但是好像没有想象中这么简单&#xff0c;因为这些山寨币&#xff0c;庄家可以自己控盘的&#xff0c;看上去好像有跌宕起伏的买卖&#xff0c;但是一单掀桌子&#xff0c;庄家他自己都不玩了…

mac 讨厌百度网盘怎么办

一、别拦我 首先请允许我泄个愤&#xff0c;tmd百度网盘下个1g的文件下载速度竟然超不过200k&#xff0c;只要不放在所有已打开软件的最前面&#xff0c;它就给你降到10k以内&#xff0c;关键是你慢就慢了&#xff0c;我也不是很着急&#xff0c;关键是你日常下载失败并且总是…

Ubuntu18.04--虚拟机配置Samba并从Windows登录

前言&#xff1a; 本文记录我自己在Windows上安装 Virtualbox &#xff0c;并在Virtualbox中安装 Ubuntu-18.04 虚拟机&#xff0c;在Ubuntu-18.04虚拟机里安装配置Smaba服务器&#xff0c;从 Windows 宿主系统上访问虚拟机共享samba目录的配置命令。 引用: N/A 正文 虚拟…