【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

本文主要是介绍【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

🎯个人博客:Dream_Chaser

🎈博客专栏:C++

📚本篇内容:仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加

目录

917.仅仅反转字母 

题目描述:

387.字符串中的第一个唯一字符

题目描述:

HJ1 字符串最后一个单词的长度

输入描述:

输出描述:

125.验证回文串

题目描述:

415.字符串相加

题目描述:


917.仅仅反转字母 

题目链接:917. 仅仅反转字母 - 力扣(LeetCode)

题目描述:

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s 。

题目示例:

题目思路:

 使用begin和end两个指针,开始时begin指向字符串开头,end指针指向字符串末尾(’\0’的前一个字符)。当两指针同时指向字母时,应该立即进行交换,接着begin++,end--。若其中一个遇到非字母或者两个指针同时遇到非字母则跳过该字符,进行对应的++,-- 操作,重复上述步骤。当begin>end循环结束,返回 s .

起始图:

动态过程: 

结果图:

代码:

class Solution {
public:bool isLetter(char ch){if(ch>= 'A' && ch<='Z')return true;if(ch>='a' && ch<='z')return true;return false;}string reverseOnlyLetters(string s) {int begin = 0,end=s.size()-1;while(begin<end){//先写出判断条件,避免越界问题,再判断是否为字母//遇到非字母跳过while(begin<end && !isLetter(s[begin])){++begin;}while(begin<end && !isLetter(s[end])){--end;}//进行字母间的交换swap(s[begin],s[end]);++begin;--end;}return s;}
};

387.字符串中的第一个唯一字符

题目链接:387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

题目描述:

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

示例:

思路:

        使用一个大小为26个int的数组countA(因为只有26个字母)统计字符串 s 中每个字母出现的次数,然后再遍历一次字符串,找到第一个唯一字符(字符串中只有这一个只出现一次,并且它是第一个,即使后面有唯一字符,也是返回第一个出现的字符),返回它在该字符串 s 中的索引,若找不到则返回-1。

class Solution {
public:int firstUniqChar(string s) {//计算这个字符串某个字符出现次数的数组int countA[26] = {0};//范围for统计出字符串中每个元素出现的次数for(auto ch : s){countA[ch - 'a']++;//映射其在字母表中的位置}for(int i =0;i<s.size();i++){if(countA[s[i] - 'a'] == 1)//找到s中第一次出现的字母{return i;//返回其索引}}return -1;//找不到}
};

HJ1 字符串最后一个单词的长度

题目链接:字符串最后一个单词的长度_牛客题霸_牛客网 (nowcoder.com)

题目描述:

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:

输出一个整数,表示输入字符串最后一个单词的长度。

示例:

图解:

#include <iostream>
using namespace std;
#include<string>
int main()
{string str;getline(cin,str);//不要使用cin>>line,因为会它遇到空格就结束了size_t i =str.rfind(' ');//找到此字符串的最后一个空格的位置if(i != string::npos)//等于则表示“未找到”或者“超出范围”{cout<<str.size() - (i+1)<<endl;}else//字符串没有空格,则计算整个字符串的大小{cout<<str.size()<<endl;}
}

125.验证回文串

题目链接:125. 验证回文串 - 力扣(LeetCode)

题目描述:

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

题目示例:

解题思路:

        先写一个判断是否为字母和数字的函数,然后写一个判断回文数的函数,先用范围for遍历这个字符串,将所有小写字母变成大写字母(为什么不用大写转小写呢?)看下面解释:

将所有小写字母转换成大写后,此时定义begin指向字符串的开头,end则指向字符串结尾('\0'的前一个位置),循环条件是begin < end,此时遍历字符串,begin向右移动,end向左移动,如果遇到 空格,以及其他非数字非字母的字符则直接跳过。

        之后,如果两指针此时指向的字符不一样(因为前面已经小写转大写)则直接返回false,如果相同依旧是begin++,end--,当遍历完字符串时,则说明此字符串为回文字符串,返回true。

代码:

class Solution {
public://判断是否是字母,数字,是返回true,否则为falsebool isLetterOrNumber(char ch){return (ch>='0' && ch<='9')|| (ch>='a' && ch<='z')|| (ch>='A' && ch<='Z');}//确保在后续比较时,无论是大写还是小写字母,都被视为相同的字符//这样做的好处在于,当判断字符串是否为回文串时,我们不需要区分大小写//在忽略空格并统一字母大小写后,其回文性更容易判断bool isPalindrome(string s)//判断是否是回文数{for(auto&ch :s){if(ch>='a' && ch<= 'z'){ch -= 32;}}int begin = 0, end = s.size()-1;while(begin<end){//遇到非字母和数字则跳过while(begin < end && !isLetterOrNumber(s[begin])){++begin;}while(begin < end && !isLetterOrNumber(s[end])){--end;}if(s[begin] != s[end]){return false;}else{++begin;--end;} }return true;} };

415.字符串相加

题目链接:415. 字符串相加 - 力扣(LeetCode)

题目描述:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

题目示例:

代码: 

class Solution {
public:string addStrings(string num1, string num2) {int end1=num1.size()-1,end2=num2.size()-1;string str;//进位int next= 0;while(end1>= 0 || end2>=0){int x1 = end1 >=0 ? num1[end1]-'0' : 0;int x2 = end2 >=0 ? num2[end2] -'0': 0;int ret = x1 + x2 +next;//进位next = ret/10;ret= ret%10;//头插str.insert(0,1,'0'+ret);--end1;--end2;}if(next ==1)str.insert(0,1,'1');return str;}
};

本篇完。

🔧本文修改次数:0

🧭更新时间:2024年4月7日 

这篇关于【C++初阶】String在OJ中的使用(一):仅仅反转字母、字符串中的第一个唯一字母、字符串最后一个单词的长度、验证回文串、字符串相加的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

MySQL的ALTER TABLE命令的使用解读

《MySQL的ALTERTABLE命令的使用解读》:本文主要介绍MySQL的ALTERTABLE命令的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、查看所建表的编China编程码格式2、修改表的编码格式3、修改列队数据类型4、添加列5、修改列的位置5.1、把列

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事