【C语言】字符串逆序

(来源:牛客网)

题目

将一个字符串str的内容颠倒过来,并输出。

数据范围:1≤len(str)≤10000 

输入描述:

输入一个字符串,可以有空格

输出描述:

输出逆序的字符串

示例1

输入

I am a student

输出

tneduts a ma I

示例2

输入

nowcoder

输出

redocwon

问题解析:

逆置字符串和逆置数组本质是一样的,就是首、尾两个指针指向的内容交换,指针移动往中间推进,直到相遇。

 第一步

首先我们得处理:输入字符串。

我们创建一个字符数组,因为数据范围:1≤len(str)≤10000 ,所以数组大小最好为10001而不是10000,预留一个'\0'的空间。

char str[10001]={0};

注意:scanf在读字符串时,遇到'\0'会结束,而我们的要求是输入可以有空格。所以写成下面这样是不行的。

scanf("%s",str);

为了解决这个问题,这时我们应该使用的函数是gets。它的头文件是stdio.h。

gets可以无限读取,不会判断上限,从stdin流中读取字符串,以回车或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

#include<stdio.h>
int main()
{char str[10001];gets(str);//这样就能输入一个字符串(可有空格)到str中reverse(str);//将字符逆序封装为函数printf("%s\n",str);return 0;
}
 第二步

 那么,现在问题就是,我们怎么来逆序呢(怎么写函数reverse)?

我们传的是数组名,而数组名本身就是指针,所以属于传址调用,所以会改变main函数中数组str的内容,也就意味着我们的返回类型可以是void。

我们就可以搭出函数的框架:

void reverse(char str[])//or void reverse(char* str)
{//
}
 字符逆序的实现逻辑

上面已经说了,其实就是创建两个指针,分别存放字符串的首字符地址和最后一个字符的地址,让其指向的内容交换,指针移动(往中间推进),直到相遇时停止。

可能有人会想到先逆着遍历字符串,然后创建一个新的数组来接收,最后再打印出新数组。但这种方法,并没有前者好,因为要创建一个新数组,而且不如前者贴合题意。

其中,把最后一个字符的地址赋给其中一个指针,需要我们先用strlen()求出字符串的长度:

#include<string.h>int len=strlen(str);
char* left=str;
char* right=&str[len-1];//char* right=left+len-1;

 指针移动就一个++,一个--:

void reverse(char* str)
{int len=strlen(str);char* left=str;char* right=&str[len-1];while(left<right){char tmp;//创建中间变量来帮助交换tmp=*left;*left=*right;*right=tmp;left++;right--;}
}

 

完整代码参考:

#include <stdio.h>
#include<string.h>
void reverse(char* str)
{int len=strlen(str);char* left=str;char* right=&str[len-1];while(left<right){char tmp;tmp=*left;*left=*right;*right=tmp;left++;right--;}
}
int main()
{char str[10001]={0};gets(str);reverse(str);printf("%s",str);return 0;
}

 

到此,本文就结束了,祝阅读愉快^_^ 

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

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

相关文章

Python 数仓建模

在Python中进行数据仓库&#xff08;Data Warehouse, 通常简称为数仓&#xff09;建模通常涉及到多个步骤&#xff0c;包括数据抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;、加载&#xff08;Load&#xff0c;即ETL过程&#xff09;&#xff…

详解 Spark核心编程之广播变量

广播变量是分布式共享只读变量 一、广播变量功能 ​ 广播变量用来将一个较大的数据对象发送到 Executor 并保存在内存中&#xff0c;同一个 Executor 中的所有 Task 都可以读取且只能读取广播变量中的数据&#xff0c;从而达到共享的目的&#xff0c;避免 Executor 中存在大量…

大语言模型技术系列讲解:大模型应用了哪些技术

为了弄懂大语言模型原理和技术细节&#xff0c;笔者计划展开系列学习&#xff0c;并将所学内容从简单到复杂的过程给大家做分享&#xff0c;希望能够体系化的认识大模型技术的内涵。本篇文章作为第一讲&#xff0c;先列出大模型使用到了哪些技术&#xff0c;目的在于对大模型使…

基于51单片机数控直流数控电源的设计

电源技术尤其是数控电源技术是一门实践性很强的工程技术,服务于各行各业。当今电源技术融合了电气、电子、系统集成、控制理论、材料等诸多学科领域。直流稳压电源是电子技术常用的仪器设备之一,广泛的应用于教学、科研等领域,是电子实验员、电子设计人员及电路开发部门进行…

“华为杯”第十三届中国研究生 数学建模竞赛-E题:粮食最低收购价政策问题研究(续)

目录 4.3 问题三:粮食价格的特殊规律性模型 4.3.1 分析和建模 4.3.2 求解和结果

kotlin1.8.10问题导致gson报错TypeToken type argument must not contain a type variable

书接上回&#xff0c;https://blog.csdn.net/jzlhll123/article/details/139302991。 之前我发现gson报错后&#xff1a; gson在2.11.0给我的kotlin项目代码报错了。 IllegalArgumentException: TypeToken type argument must not contain a type variable 上次解释原因是因为&…

String常用操作

String常用方法 构造字符串 常用的构造字符串有3种&#xff1a; 1.直接赋值String s "abcd"; 2.实例化调用构造方法String s new String("abcd"); 3.实例化传字符数组 char[] ch {a,b,c,d}; String s new String(ch);字符串比较 比较 比较的是两个…

HCIA-HarmonyOS Application Developer 课程大纲

一&#xff1a;鸿蒙 Mac 版、 Windows 版【编辑器】和【模拟器】 & 鸿蒙基础环境搭建 - &#xff08; 3 课时&#xff09; - Mac arm 版开发环境搭建&#xff1a;Mac arm 版模拟器安装及配置&#xff1b;安装 DevEcoStudioPreview 版本&#xff1b; - Windows 版开发…

对人工智能技术GPT-4o的初步认知

GPT-4o是一种高级人工智能技术&#xff0c;是OpenAI公司基于GPT系列模型的最新版本。与之前的版本相比&#xff0c;GPT-4o具有更强大的技术能力和性能。 首先&#xff0c;在版本间的对比分析中&#xff0c;GPT-4o在模型的规模和参数量上显著提升。它的训练数据集更大&#xff…

Cpp模板-template、typename(二)

T —— 类型参数&#xff0c;也叫模板参数 <> 中包括两种类型参数&#xff1a;用typename/class修饰的是类型模板参数&#xff0c;是类型说明符。另外的称为非类型模板参数。 与函数模板一样&#xff0c;非类型参数不允许使用浮点型、类对象(对象的引用可以)、void 一…

「C系列」C 数据类型

文章目录 一、C 数据类型-介绍1. 基本数据类型&#xff1a;2. 派生数据类型&#xff1a;3. 限定符&#xff1a;4. 函数类型&#xff1a;5. 类型定义&#xff08;typedef&#xff09;&#xff1a;6. 位字段&#xff08;Bit-fields&#xff09;&#xff1a; 二、C 数据类型-案例1…

35【Aseprite 作图】苹果——拆解

1 叶子是&#xff0c;竖着4&#xff0c;然后2 1 竖2&#xff1b;左边是1 2 横着2&#xff1b;然后横着连接 之后画苹果&#xff0c;4 3 1 1 1 &#xff0c;竖着8 2 1 1 1 2 横着5&#xff1b;之后水平翻转&#xff08;苹果左右一样&#xff09; 2 加上浅绿做底色 3 阴影部分 …

Redis-03

Redis常用命令 1. SET key value: 设置指定 key 的值为 value。 2. GET key: 获取指定 key 的值。 3. DEL key: 删除指定 key 及其对应的值。 4. KEYS pattern: 查找所有符合给定 pattern 的 key。 5. EXISTS key: 判断指定 key 是否存在。 6. INCR key: 将指定 key 的值增加 …

C语言 | Leetcode C语言题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; typedef struct {int key;UT_hash_handle hh; }Hash; int longestConsecutive(int* nums, int numsSize) {Hash* headNULL;Hash* tempNULL;for(int i0;i<numsSize;i){int numnums[i];HASH_FIND_INT(head,&num,temp);if(!temp){temp…

HCIP的学习(27)

RSTP—802.1W—快速生成树协议 STP缺陷&#xff1a; 1、收敛速度慢----STP的算法是一种被动的算法&#xff0c;依赖于计时器来进行状态变化 2、链路利用率低​ RSTP向下兼容STP协议。&#xff08;STP不兼容RSTP&#xff09; 改进点1—端口角色 802.1D协议---根端口、指定端口…

驾校-短视频营销招生精品课:抖音推广技巧,抖音短视频招生(41节课)

课程下载&#xff1a;驾校-短视频营销招生精品课&#xff1a;抖音推广技巧&#xff0c;抖音短视频招生(41节课)-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程内容&#xff1a; 课程目录 [1]-第1课驾校为什么要全力做好短视频营销.mp4 …

Vue3-watch监听ref和reactive数据的五种情况及watchEffect

何为watch&#xff1a; 文档定义&#xff1a; 用于声明在数据更改时调用的侦听回调。 watch 选项期望接受一个对象&#xff0c;其中键是需要侦听的响应式组件实例属性 (例如&#xff0c;通过 data 或 computed 声明的属性)——值是相应的回调函数。该回调函数接受被侦听源的新…

Word2021中的The Mathtype DLL cannot be found问题解决(office 16+mathtype7+非初次安装)

问题描述&#xff0c;我的问题发生在word中无法使用自定义功能区中的mathtype 我的环境是&#xff1a;W11Word2021mathtype7 因为我是第二次安装mathtype7&#xff0c;所以我怀疑是因为没有卸载干净&#xff0c;于是我参考了下面这篇文章的做法 参考文章 1.首先重新卸载当前的…

Go语言学习记录

GO语法学习之路 学习时间段2024-06-02学习记录安装&环境配置Go安装包内容统一入门姿势&#xff1a;hello world实现 Go语法初学Go 运行时&#xff08;runtime&#xff09;Go解释器 学习时间段 #mermaid-svg-tTuVZ3bbdJvu04kX {font-family:"trebuchet ms",verdan…

百度大模型算法实习岗上岸经验分享!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…