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.xdnf.cn/news/1424300.html

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

相关文章

非成对意象翻译中的内容制约范式再思考

Rethinking the Paradigm of Content Constraints in Unpaired Image-to-Image Translation 非成对意象翻译中的内容制约范式再思考 Xiuding Cai1 2, Yaoyao Zhu1 2, Dong Miao1 2, Linjie Fu1 2, Yu Yao1 2 蔡秀定 1 2 、朱瑶瑶 1 2 、苗东 1 2 、付林杰 1 2 、余瑶 1 2 Corre…

精选合作伙伴:如何挑选最适合您小程序商城开发的软件公司

在选择一家合适的软件公司来协助您开发并运营小程序商城时&#xff0c;选择过程无疑是一项关键而复杂的任务。市场上的软件公司繁多&#xff0c;各具特色&#xff0c;那么&#xff0c;如何在这众多的选择中找到最适合您的合作伙伴呢&#xff1f;以下将从需求梳理、公司实力评估…

VC++6.0 常用的文件对话框和目录选择对话框

1&#xff0c;文件对话框 //1,弹出文件打开对话框CString strFileName "";char szFilter[] {"exe files(*.exe)|*.exe|All Files(*.*)|*.*|"};CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,NULL);if(dlg.DoModal() …

scanf读取标准输入

内容 scanf函数的原理 多种数据类型混合输入 常用的数据输入/输出函数 程序员可以给程序输入数据&#xff0c;程序处理后会返回一个输出。C语言通过函数库读取标准输入&#xff0c;然后通过对应函数处理将结果打印到屏幕上&#xff0c;printf函数可以将结果打印到屏幕上。下…

【刷题篇】二分查找(二)

文章目录 1、山脉数组的峰顶索引2、寻找峰值3、寻找旋转排序数组中的最小值4、LCR 点名 1、山脉数组的峰顶索引 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3 存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] &l…

Java基础教程 - 7 面向对象-1

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 7 面向对象 面向对象&am…

人物介绍模板 PSD 源文件免费获取

免费获取 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1sq3e6djMdZt76Sh_uqVxWg 提取码&#xff1a;naun

论文阅读:基于改进 YOLOv5算法的密集动态目标检测方法

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;基于改进YOLOv5算法的密集动态目标检测方法 - 中国知网 (cnki.net) 概要 目的&#xff1a;提出一种基于 YOLOv5改进的检测算法&#xff0c;解决密集动态目标检测精度低及易漏检的问题。 方法&…

C++ 中重写重载和隐藏的区别

重写&#xff08;override&#xff09;、重载&#xff08;overload&#xff09;和隐藏&#xff08;overwrite&#xff09;在C中是3个完全不同的概念。我们这里对其进行详细的说明 1、重写&#xff08;override&#xff09;是指派生类覆盖了基类的虚函数&#xff0c;这里的覆盖必…

基于Django的图书管理系统

文章目录 前言一、页面展示1.登录2.前端页面3.后端页面 总结 前言 本网站调用Django编写了图书管理网站&#xff0c;可以在后端控制书籍&#xff0c;前端进行书籍预览 一、页面展示 1.登录 2.前端页面 3.后端页面 — ![在这里插入图片描述](https://img-blog.csdnimg.cn/dir…

5.2 操作系统安装必备知识

目前操作系统安装方式接近于全自动化&#xff0c;用户无需做过多操作就能完成操作系统安装。但是操作系统安装也有其复杂的一面&#xff0c;例如固件及分区表的不同就会导致操作系统安装失败。本节主要介绍系统安装的一些必备知识。 5.2.1 BIOS 概述 BIOS(Basic Input/Output …

jspXMl标记语言基础

1.打开命令框进入数据库 打开eclipse创建需要连接的项目 粘贴驱动程序 查看驱动器 使用sql的包 int代表个 conlm代表列名 <%page import"java.sql.ResultSet"%> <%page import"java.sql.Statement"%> <%page import"java.sql.Connect…

Math.Round()函数说明

Math.Round()并不是严格意义上的是四舍五入函数。它默认的执行的是“银行家舍入”算法&#xff0c;即四舍六入五取偶。概括为&#xff1a;四舍六入五考虑、五后非零就进一&#xff0c;五后皆零看奇偶&#xff0c;五前为偶应舍去、五前为奇要进一。 当为5时&#xff0c;取离着最…

客观需求验证的常见5大步骤(实施版)

我们在挖掘用户需求时&#xff0c;往往容易犯伪需求或需求错位等问题&#xff0c;因此需要进行客观需求验证。通过客观的验证&#xff0c;我们可以有效减少主观判断误差问题&#xff0c;确保需求的准确性&#xff0c;从而降低需求变更和项目风险的概率&#xff0c;减少开发成本…

在做题中学习(58):和为K的子数组

560. 和为 K 的子数组 - 力扣&#xff08;LeetCode&#xff09; 因为是判断子数组的和 要返回 k 的次数&#xff0c;所以 解法&#xff1a;前缀和 哈希表 提出一个概念&#xff1a;以下标i为结尾的所有子数组 那要找出所有和 k的子数组 就相当于&#xff1a;找出所有值为…

[Cesium for Supermap]加载iserver发布的wms服务

1&#xff0c;wms服务 2&#xff0c;加载代码 let provider new Cesium.WebMapServiceImageryProvider({url: "http://support.supermap.com.cn:8090/iserver/services/map-china400/wms111/China_4326",enablePickFeatures:true,rectangle: Cesium.Rectangle.fromD…

dbeaver 链接 Oceanbase 数据库,dbeaver安装数据库驱动

新增驱动 提前到Oceanbase官网下载好驱动 1、点击数据库 -> 驱动管理器 -> 新建 2、添加驱动文件 联接数据库 1、选择你添加的驱动 2、测试

【OpenHarmony IDL工具规格及使用说明书】

OpenHarmony IDL工具规格及使用说明书 IDL接口描述语言简介 当客户端和服务器进行IPC通信时&#xff0c;需要定义双方都认可的接口&#xff0c;以保障双方可以成功通信&#xff0c;OpenHarmony IDL&#xff08;OpenHarmony Interface Definition Language&#xff09;则是一种…

【Apache Doris】周FAQ集锦:第 3 期

【Apache Doris】周FAQ集锦&#xff1a;第 3 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

[AI]-(第1期):OpenAI-API调用

文章目录 一、OpenAI API中使用GPT-3.5-turbo模型充值方式使用模型计费方式价格说明相关限制和条款 二、接入一个OpenAI API流程1. 获取OpenAI API 密钥2. 集成ChatGPT到小程序3. 处理用户输入4. 调用OpenAI API5. 返回回复至小程序6. 持续优化7. Postman请求示例 三、通用AI客…