字符串逆序输出

article/2025/10/24 6:43:31

字符串逆置

方法1:下标法,定义一个i下标从头开始,使用strlen函数求出字符串长度(不包括'\0'),定义一个j下标等于字符串长度减一,i,j下标字符进行交换,只需要遍历字符串长度一半即可

方法2:额外创建一个数组,求出原字符串长度,定义下标j为字符串长度减一,从尾巴开始遍历将字符复制到新数组,最后结尾记得加'\0'

方法3:我们可以让一个指针(类似于下标的用法,代表字符的地址),从头走到尾,然后进行字符交换

 如上图当str和p同时指向c时停止,那么交换结束,但如果字符串长度为偶数,且当str大于p时交换结束,即循环结束条件为str>p(指针可以比较大小)

代码实现:

void Reverse(char* str)
{char* p;for (p = str; *p != '\0'; p++){;}//*p已经是'\0'p--;  //所以要减1char temp;while (str < p){temp = *p;*p = *str;*str = temp;str++;p--;}
}int main()
{char arr[100];scanf("%s", arr);Reverse(arr);printf("%s",arr);return 0;
}

测试用例:

首先我在这里讲一下10进制数转换其他进制数字的思想   

给你一个十进制,比如72;首先72%16 得到余数 8; 72/16 得到商为4; 4%16 得到余数 4 ; 4/16 等于0.  当商为零的时候,将获得的余数倒序输出即可得到,72相对应的十六进制为 48.

如果掌握了上面的字符串逆置和进制转换的方法,那么我们来思考一下下面这道题:

把数字n转成radix进制的字符串,存放在str中,例如123456,10->"123456" 

123,16->"7B". radix在[2,36]范围      

我们应该怎么做呢?  首先我们需要思考如何将一个数字转为字符eg:123->"123"                                                                                                                                                                     

 观察上图ASCII表可知数字1与字符1相差48,数字2与字符2相差48,而48正是字符'0'的ASCII值,那么数字1变为字符1是不是就是'1'=1+'0',但是这只适用于0-9的数字,如果我们对数字进行进制取余大于9该如何转换呢?

 观察上图我们可知,假设为16进制,我们对数字10进行16取余数得到10如何转为'A'呢?即'A'=10-10+'A'   同理数字11转为16进制字符为'B'=11-10+'A'

这样我们就将0-9,和大于9的数字转换为字符的问题解决了,全部转为字符串后记得后面补'\0',调用前面的字符串反序函数即可!

代码示例:

void Reverse(char* str)  //字符串反序
{char* p;for (p = str; *p != '\0'; p++){;}//*p已经是'\0'p--;  //所以要减1char temp;while (str < p){temp = *p;*p = *str;*str = temp;str++;p--;}
}
void Myitoar(char* str, int n, int radix)  //进制转换
{int i = 0;int temp;do{temp = n % radix;if (temp < 10){*(str + i) = temp + '0';i++;}else{*(str + i) = temp - 10 + 'A';i++;}n /= radix;} while (n != 0);*(str + i) = '\0';Reverse(str);
}
int main()
{char arr[100];int n;char* p = arr;printf("请输入数字:");scanf("%d", &n);int rax;printf("请输入所要转换的进制:");scanf("%d", &rax);Myitoar(p, n, rax);/*for (; *p != '\0'; p++){printf("%c",*p);}*/printf("转换后为:");printf("%s", p);return 0;
}

测试用例: 

 

 

                                         


http://chatgpt.dhexx.cn/article/UqkVbkXE.shtml

相关文章

递归实现字符串逆序

编写一个函数 reverse_string(char * string)&#xff08;递归实现&#xff09;&#xff0c;将参数字符串中的字符反向排列&#xff0c;不是逆序打印。 &#xff08;要求&#xff1a;不能使用C函数库中的字符串操作函数。&#xff09; &#xff08;在本次练习中&#xff0c;由于…

C字符串逆序、C++字符串逆序

1.C字符串逆序&#xff1a; void CReverse(char* ch) {int nLen strlen(ch) - 1;char szStr;for (int i 0; i < nLen - i; i){szStr ch[i];ch[i] ch[nLen - i];ch[nLen - i] szStr;}ch[nLen 1] 0; } 2.C字符串逆序&#xff08;利用栈的先进后出的原理&#xff09; …

字符串逆序 - 多种方法实现

字符串逆序实现方法 1. 借助额外数组2. 循环实现2.1 图解2.2 思路2.3 代码实现 3. 递归实现14. 递归实现24.1 思路 对字符串进行逆序&#xff0c;以字符串abcdef为例 1. 借助额外数组 #include <stdio.h> #include <string.h>int main() {char str[] "abcd…

字符串逆序的几种写法

字符串逆序的几种写法 提示&#xff1a;将字符串逆序与将其逆序打印出来是两码事&#xff0c;逆序是将内容倒着改变了&#xff0c;逆序打印虽然打印结果也是倒着的&#xff0c;不过储存字符串的数组内容并没有改变。 一、非递归写法 1. 将一个给定的字符串abcdef逆序 #incl…

字符串逆序(递归实现)

目录 一、代码实现&#xff1a; 二、代码逐步实现过程&#xff1a; 1、不用递归用循环方式实现&#xff1a; 1、使用库函数&#xff1a; 2、不使用库函数&#xff1a; &#xff08;1&#xff09;使用参数是数组的形式&#xff1a; &#xff08;2&#xff09;使用参数是指…

【C语言刷题】字符串逆序

目录 一、字符串逆序&#xff08;基础题&#xff09; 1.一个经典的错误&#xff0c;标准的零分 2.采用gets函数来修补漏洞 3.非要使用scanf怎么办&#xff1f; 4.使用指针来实现逆序函数 5.将函数修改为&#xff0c;只要传入两个地址&#xff0c;就能逆序这两个地址之间的…

使用C语言实现字符串逆序操作

这篇文章主要介绍了使用C语言实现字符串逆序操作案例,本文包含使用C语言的两种方法去实现,递归和非递归,以下就是详细内容,需要的朋友可以参考下 编写一个函数 reverse_string(char * string) 实现&#xff1a;将参数字符串中的字符反向排列。 要求&#xff1a;不能使用C函数库…

C语言实现——字符串逆序

目录 前言 如何实现 代码实现 1.设立一个数组存放输入的字符串 2.将输入的字符串整体逆序 2.1 计算字符串长度 2.2 使用函数来实现倒置 2.3 实现函数reverse 3.将其中每个单词再进行逆序 3.1 整个语句如何结束循环 3.2 每个单词的结束位置 3.3 内部实现 3.4 判断…

dtb展开成device_node

dtb展开成device_node 文章目录 dtb展开成device_node设备树是如何传递给内核的&#xff1f;设备树相关结构体举例of操作函数与查找节点有关的 OF 函数1、of_find_node_by_name 函数2、of_find_node_by_type 函数3、of_find_compatible_node 函数4、of_find_matching_node_and_…

设备树之DTS与DTB格式

目录 一、设备树 二、DTS格式 2.1 属性 2.2 节点 2.3 引用其他节点 2.4 小总结 三、DTB格式 3.1 结构 3.2 分析 一、设备树 对于点灯字符设备驱动程序可以有三种写法&#xff0c;首先是传统方法&#xff0c;这种方式直接在程序中写死&#xff0c;其次是利用总线设备驱…

Android boot.img dtb.img 编译过程

最近做RK3588案子,修改dts后,导致boot.img过大,编译出错,整体分析下boot.img过大的原因是因为在打包boot.img过程中,dbt.img过大导致,所以整体分析下boot.img编译过程,尤其是dbt.img的生成过程. boot.img生成过程 在Andorid跟目录下执行, source build/envsetup.sh 然后lunch x…

Linux 设备树(二) dtc dts/dtsi dtb的关系

在学习设备树之前&#xff0c;我们先来了解一下跟设备树相关的三个对象&#xff0c;分别是dtc、dts/dtsi、dtb。 dtc:用来编译设备树的工具 dts:设备树描述文件 dtsi:设备树头文件 dtb:编译后的二进制文件 dtc设备树编译工具 dtc是用来编译设备树的工具&#xff0c;就像gcc可以…

dtb如何转换到platform_device

分2步&#xff0c;第一步是首先转换为device_node&#xff0c;第二步device_node转换为platform_device。 第一步 /*** unflatten_device_tree - create tree of device_nodes from flat blob** unflattens the device-tree passed by the firmware, creating the* tree of st…

U-Boot 之一 零基础编译 U-Boot 过程详解、Image 镜像介绍及使用说明、DTB 文件使用说明

最近&#xff0c;工作重心要从裸机开发转移到嵌入式 Linux 系统开发&#xff0c;在之前的博文 Linux 之八 完整嵌入式 Linux 环境、&#xff08;交叉&#xff09;编译工具链、CPU 体系架构、嵌入式系统构建工具 中详细介绍了嵌入式 Linux 环境&#xff0c;接下来就是实际动手学…

dts、dtb的那些事儿

笔者最近在支持新的案子&#xff0c;过于忙碌&#xff0c;好久没更新了&#xff0c;勿怪。 1、设备树大变革故事 2011年3月17日的ARM Linux邮件列表有封邮件“this whole ARM thing is a fucking pain in the ass”引起了轩然大波&#xff0c;原来是我们的Linux之父Linus Torv…

DBT工具简介

What is DBT 在将数据加载到集中式数据仓库之前&#xff0c;必须对其进行清理、保持一致并根据需要进行组合。换句话说&#xff0c;必须转换数据&#xff0c;这就是我们所谓的 ETL&#xff08;提取、转换、加载&#xff09;和 ELT 中的“T”。 这是挖掘数据价值的关键一步。 而…

4.2uboot对设备树的支持——dtb的修改原理

本节说明在uboot中修改dtb的原理。 在uboot中&#xff0c;有一些命令支持对dtb文件进行修改。 当我们想要修改dtb文件时&#xff0c;可以直接修改dts文件&#xff0c;然后编译dts文件生成新的dtb文件&#xff0c;再将新的dtb文件载入设备。 或者&#xff0c;我们也可以在ubo…

DBT是什么

关于DBT DBT 是一种数据转换工作流&#xff0c;可帮助您完成更多工作&#xff0c;同时产生更高质量的结果。您可以使用 dbt 来模块化和集中分析代码&#xff0c;同时还为数据团队提供软件工程工作流中常见的护栏。在将数据模型安全部署到生产环境之前&#xff0c;通过监控和可见…

2.1设备树的规范(dts和dtb)——DTS格式

本节学习设备树的规范。 使用设备树时&#xff0c;需要编写dts文件&#xff0c;然后使用dtc编译dts文件&#xff0c;生成dtb文件。 所以本节分为两部分&#xff0c;第一部分讲解dts格式&#xff0c;第二部分讲解dtb格式。 首先看一下dts文件的布局。 DTS文件布局&#xff0…

关于EMUELC适配各种机型,DTB如何修改教程

很多爱好者留言&#xff0c;都想问关于EMUELC的dtb适配机型问题&#xff0c;这里我就出一个教程&#xff0c;如何修改dtb&#xff0c;然后去适配自己的机型&#xff0c;然后启动 。这里我只是提供方法&#xff0c;具体的调试是需要原理图进行配置。 首先&#xff0c;不管是aml…