【C++_string类练习】仅仅反转字母

news2024/11/27 5:25:46

题目链接:仅仅反转字母


解题思路:

这种反转字符的题目我第一个想到的方法就是:双指针

一个指针在前start,一个指针在后back,

如果指针所指向的位置的值是字母,那么两个指针位置的值就进行交换,

如果不是,则该指针就往下走一位,直到所指向的位置的值是字母。

ok思路有了,现在的问题就是:

1.怎么表示前后两个指针

2.怎么让这两个指针动起来?什么时候又停下?

3.用什么方法来判断该位置是不是字母?

好,我们一个一个来看:

第一个问题:怎么表示前后两个指针

看过我【C++】String类这篇文章的都知道,访问string我们有三种方式:

1.[ ]+下标

2.迭代器

3.范围for

既然我们想要表示string的前后两个位置,我这里选择的是迭代器:

string::iterator start = s.begin();
string::iterator back = s.end()-1;

注意begin和end是左闭右开区间[……),所以back这里要减1才能指向最后一个位置。

2.怎么让这两个指针动起来?什么时候又停下?

我们可以用while循环,start++,back--

同时要保持start<back

3.用什么方法来判断该位置是不是字母?

可以用isalpha函数来判断,

isalpha 函数是一个标准库函数,用于检查给定的字符是否是字母。

  • 如果 c 是一个字母(大写或小写),则返回非零值(通常是 1)。
  • 如果 c 不是字母,则返回 0

拓展:

但是,它有个要求,就是它希望我们给它的字符对应的数字要是0到255之间的,这样它才能正确地判断。

问题来了,如果我们直接给一个字符给isalpha,而这个字符对应的数字在ASCII编码里是负数(因为char类型在有些电脑里是可以表示负数的),那么isalpha就可能会出错,因为它不认识这个负数对应的字符是什么。

所以,为了避免这个问题,我们要先把这个字符转换成一个无符号的数字,确保它是0到255之间的。这就是static_cast<unsigned char>(*back)的作用。它就像是一个翻译,把有符号的字符翻译成无符号的数字,这样isalpha就能正确地识别字符了。

当然,这道题,不用加static_cast<unsigned char>(*back)也行

while (start < back)
	{
		while(start < back&&(!isalpha(static_cast<unsigned char>(*start))))
			start++;
		while (start < back&&(!isalpha(static_cast<unsigned char>(*back))))
			back--;
		swap(*start, *back);
		start++;
		back--;
	}

所以整体代码为:

class Solution {
public:
    string reverseOnlyLetters(string s) {
    string::iterator start = s.begin();
	string::iterator back = s.end()-1;

	while (start < back)
	{
		while(start < back&&(!isalpha(static_cast<unsigned char>(*start))))
			start++;
		while (start < back&&(!isalpha(static_cast<unsigned char>(*back))))
			back--;
		swap(*start, *back);
		start++;
		back--;
	}
	
    return s;
};
    
};

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

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

相关文章

P2-3与P2-4.【C语言基本数据类型、运算符和表达式】第三节与第四节

讲解视频&#xff1a; P2-3.【基本数据类型、运算符和表达式】第三节 P2-4.【基本数据类型、运算符和表达式】第四节 目录 必备知识与理论 任务实施 必备知识与理论 C语言中把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。 其运算符和表达式数量之多&a…

以简单组合优化为例讨论计算复杂性

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报 所用教材&#xff1a;北京大学屈婉玲教授《算法设计与分析》 课程资料&#xff1a;https://www.icourse163.org/course/PKU-1002525003 承诺不用于任何商业用途&#xff0c;仅用于学术交流和分享 更多内容请关注课题…

centOS实用命令

一、查看进程&#xff0c;端口占用 netstat命令(window和linux通用&#xff0c;细节不同) 查看端口占用(linux) netstat -ano |grep 8080查看端口占用(window) netstat -ano |findstr 8080ps命令 可以直接使用ps aux查看所有用户的进程信息 一些参数 参数解释-p根据进程P…

【git】如何快速准确的回退(revert)已经合并(merge)主分支(master)的新提交代码

文章目录 前言一、merge模式二、回滚步骤总结 前言 我们在做一些需求&#xff0c;正常流程经过开发&#xff0c;测试到最后和代码上线。但是有时候就会发生一些小插曲&#xff0c;比如产品说老板说某某某你的代码要延后上线&#xff01;&#xff01;或者你写的不合格预发环境出…

(成功解决)ubuntu22.04不小心更新成了atzlinux12.7.1,右上角出现红色错误符号

文章目录 &#x1f315;问题&#x1f315;查看系统版本&#x1f315;为什么更新更成了atzlinux&#x1f315;通过修复依赖关系尝试解决右上角红色错误符号&#x1f315;把源换成ubuntu的源&#x1f315;删除atzlinux源和自定义的第三方源&#x1f315;重新创建/etc/os-release文…

AJAX——服务端响应 JSON 数据

网页文件中&#xff1a; js 文件中&#xff1a; 本文分享到此结束&#xff0c;欢迎大家评论区相互讨论学习&#xff0c;下一篇继续分享AJAX中AJAX 请求超时与网络异常处理的学习。

吴伟仁《英国文学史及选读》第一二册课后答案PDF

新经典高等学校英语专业系列教材《英国文学史及选读》根据英国文学历史的顺序结合作品选读编写而成&#xff0c;在历史部分&#xff0c;对英国文学史的每个阶段作了简明扼要的概述&#xff0c;而在作品选读部分则尽可能遴选了文学史上的重要作家和重要作品。教材内容丰富&#…

python机器人编程——用python调用API控制wifi小车的实例程序

目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…

vue elementui table编辑表单时,弹框增加编辑明细数据

需求: 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;通过弹框方式增加或者编辑。 效果图&#xff1a; 代码&#xff1a; <!-- 新增主表弹窗 Begin --><el-dialog:title"titleInfo"top"5vh"centerwidth"…

从零开始学PHP之输出语句变量常量

一、 输出方式 在 PHP 中输出方式&#xff1a; echo&#xff0c;print&#xff0c;print_r&#xff0c;var_dump 1、echo和print为php的输出语句 2、var_dump&#xff0c;print_r为php的输出函数 &#xff08;这里不做介绍&#xff09;echo 和 print 区别 1、echo - 可以输出…

Python学习的自我理解和想法(15)

学的是b站的课程&#xff08;千锋教育&#xff09;&#xff0c;跟老师写程序&#xff0c;不是自创的代码&#xff01; 今天是学Python的第15天&#xff0c;从今天开始&#xff0c;每天一到两个常用模块&#xff0c;更完恢复到原来的&#xff0c;开学了&#xff0c;时间不多&am…

StarRocks大批量数据导入方案-使用 Routine Load 导入数据

本文详细介绍如何使用Routine Load 导入数据 一、准备工作 1.1 安装基础环境 主要是安装StarRocks和Kafka&#xff0c;本文直接跳过不做详细介绍~ 二、概念及原理 2.1 概念 导入作业&#xff08;Load job&#xff09; 导入作业会常驻运行&#xff0c;当导入作业的状态为 R…

【数据结构与算法】链表(上)

记录自己所学&#xff0c;无详细讲解 无头单链表实现 1.项目目录文件 2.头文件 Slist.h #include <stdio.h> #include <assert.h> #include <stdlib.h> struct Slist {int data;struct Slist* next; }; typedef struct Slist Slist; //初始化 void SlistI…

算法专题八: 链表

目录 链表1. 链表的常用技巧和操作总结2. 两数相加3. 两两交换链表中的节点4. 重排链表5. 合并K个升序链表6. K个一组翻转链表 链表 1. 链表的常用技巧和操作总结 常用技巧 画图!!! 更加直观形象, 便于我们理解引入虚拟头节点, 方便我们对链表的操作, 减少我们对边界情况的考…

《欢乐饭米粒儿》第九季热播中,今晚精彩继续!

由鲜博士独家冠名播出的独创小品剧《欢乐饭米粒儿》第九季正在辽宁卫视热播&#xff0c;本期节目将于今晚20:50在辽宁卫视继续为观众带来欢笑与感动。本周节目亮点纷呈&#xff0c;三个小品故事不仅延续了节目一贯的幽默风格&#xff0c;更在欢笑中传递了深刻的社会价值和情感共…

Java 8 Stream API:从基础到高级,掌握流处理的艺术

一、Stream&#xff08;流&#xff09;基本介绍 Java 8 API 添加了一个新的抽象称为Stream&#xff08;流&#xff09;&#xff0c;可以让你以一种声明的方式处理数据&#xff0c;这种风格将要处理的元素集合看做一种流&#xff0c;元素流在管道中传输&#xff0c;并在管道中间…

Kamailio-Sngrep 短小精悍的利器

一个sip的抓包小工具&#xff0c;在GitHub上竟然能够积累1K的star&#xff0c;看来还是有点东西&#xff0c;当然官方的友链也是发挥了重要作用 首先送上项目地址&#xff0c;有能力的宝子可以自行查看 经典的网络抓包工具有很多&#xff0c;比如&#xff1a; Wireshark&…

vue实现文件预览和文件上传、下载、预览——多图、模型、dwg图纸、文档(word、excel、ppt、pdf)

整体思路&#xff08;模型特殊不考虑&#xff0c;别人封装不具备参考性&#xff09; 图片上传采用单独的组件&#xff0c;其他三种类型采用一个上传组件&#xff08;仅仅文件格式不同&#xff09;文件上传采用前端直接上传阿里云的方式图片预览使用elementUI自带的image预览dw…

双目标定的原理

标定目的&#xff1a;建立相机成像几何模型并矫正透镜畸变。 建立相机成像几何模型&#xff1a;计算机视觉的首要任务就是要通过拍摄到的图像信息获取到物体在真实三维世界里相对应的信息&#xff0c;于是&#xff0c;建立物体从三维世界映射到相机成像平面这一过程中的几何模…

ssm剧本杀预约系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 2.1 Java语言…