【C/C++】涉及string类的经典OJ编程题
【C/C++】涉及string类的经典OJ编程题
- 一. 把字符串转化成整数(atoi)
- 解法一:(不用long)
- 完整代码:
- 解法二:(用long)
- 二.字符串相加
- 代码实现(含注释):
- 三.反转字符串
- 代码实现:
- 四.字符串中的第一个唯一字符
- 解法一:
- 解法二:(推荐)
一. 把字符串转化成整数(atoi)
点这里:本题LeetCode链接
该题源代码声明:
作者:Krahets
链接:https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/solutions/201301/mian-shi-ti-67-ba-zi-fu-chuan-zhuan-huan-cheng-z-4/
来源:力扣(LeetCode)

解法一:(不用long)
首先来看该题要用到的所以的变量的定义和初始化
int res = 0, bndry = INT_MAX / 10;int i = 0, sign = 1, length = str.size();
第一步:
- 判断字符串是否为空字符串
- 读取字符串并丢弃无用的前导空歌并且判断该字符串是否为全为空格的字符串。通过对下标 i 的控制来实现。
代码实现:
if(length == 0) return 0;while(str[i] == ' ')if(++i == length) return 0;//若不是空字符串,i走到符号位
第二步:
判断字符的正负
代码实现:
if(str[i] == '-') sign = -1;
if(str[i] == '-' || str[i] == '+') i++;//让i走到符号位后的第一个数字字符
第三步:(关键)
(最大最小数值)边界的处理
一旦遇到非数字字符直接返回0;此时的 j 为第一个数字字符。
变量的定义和初始化:int res = 0, bndry = INT_MAX / 10; (INT_MAX )等于2147483647,注意这里的个位数字7;注意初始化的bndry = 214748364;
再看这句代码:res = res * 10 + (str[j] - ‘0’);通过这句代码可以将字符数字转发为对应大小的整形数值。现在就可以理解 if 语句里面的条件判断:
- 当res一旦大于bndry = 214748364;往下走完语句res = res * 10 + (str[j] - ‘0’);时,res就会越界;
- 当(res == bndry && str[j] > ‘7’),此时下标 j 指向的字符大于7时,往下走完语句res = res * 10 + (str[j] - ‘0’);时,res也会越界;
代码实现:
for(int j = i; j < length; j++) {if(str[j] < '0' || str[j] > '9') break;if(res > bndry || res == bndry && str[j] > '7')return sign == 1 ? INT_MAX : INT_MIN;res = res * 10 + (str[j] - '0');}
完整代码:
class Solution {
public:int myAtoi(string str) {int res = 0, bndry = INT_MAX / 10;int i = 0, sign = 1, length = str.size();if(length == 0) return 0;while(str[i] == ' ')if(++i == length) return 0;if(str[i] == '-') sign = -1;if(str[i] == '-' || str[i] == '+') i++;for(int j = i; j < length; j++) {if(str[j] < '0' || str[j] > '9') break;if(res > bndry || res == bndry && str[j] > '7')return sign == 1 ? INT_MAX : INT_MIN;res = res * 10 + (str[j] - '0');}return sign * res;}
};
解法二:(用long)
用long的前提:(操作系统)环境能存储 64 位大小的有符号整数
class Solution {
public:int myAtoi(string str) {long int res = 0, bndry = INT_MAX / 10;int i = 0, sign = 1, length = str.size();if(length == 0) return 0;while(str[i] == ' '){i++;if(i == length)return 0;}if(str[i] == '-')sign = -1;if(str[i] == '-' || str[i] == '+') i++;for(int j = i; j < length; j++){if(str[j] > '9' || str[j] < '0')return sign * res;res = res * 10 + str[j] - '0';//如果不用long,这句代码可能会造成res溢出int max;无法通过部分测试if(res > INT_MAX)return sign == 1 ? INT_MAX : INT_MIN;}return sign * res;}
};
二.字符串相加
点这里:本题LeetCode链接

代码实现(含注释):
class Solution {
public:string addStrings(string num1, string num2) {string tmp;int count = 0;//用于进位int gap1 = num1.end() - num1.begin() - 1;//字符串1尾下标int gap2 = num2.end() - num2.begin() - 1;//字符串2尾下标while(gap1 >= 0 || gap2 >= 0){int x = gap1 >= 0 ? num1[gap1] - '0' : 0;//将数字字符串转换为对应整形数字int y = gap2 >= 0 ? num2[gap2] - '0' : 0;//当下标走到负数将其转换为0int sum = x + y + count;//对应两两相加,在加上进位数值count = sum / 10;//得进位数值sum %= 10;//得个位数值tmp += (sum + '0');//依次拼接(逆序)gap1--;gap2--;}if(count == 1)//解决一个字符串为“0”,另一个为“9”,还有最高位未进位的情况{tmp += '1';}reverse(tmp.begin(), tmp.end());//颠倒为顺序return tmp;}
};
三.反转字符串
点这里:本题LeetCode链接

代码实现:
class Solution {
public:void reverseString(vector<char>& s) {int begin = 0;int end = s.size() - 1;while(begin < end){swap(s[begin], s[end]);begin++;end--;}}
};
四.字符串中的第一个唯一字符
点这里:本题LeetCode链接

解法一:
原理:两两比较字符串中的所以字符,通过计数来判断是否有相同字符
class Solution {
public:int firstUniqChar(string s) {for(int i = 0; i < s.size(); i++){int count = 0;int j = 0;for(; j < s.size(); j++){if(s[i] == s[j] && i != j)break;if(s[i] != s[j])count++;}if(count == s.size() - 1)return i;}return -1;}
};
解法二:(推荐)
原理:如果从左往右找,和从右往左找同一个字符,返回它们的下标相同,则在给出的字符串中该字符有且只有这一个
s.find(s[i]) : 返回字符串s中从左向右查找s[i]第一次出现的位置;
s.rfind(s[i]) : 返回字符串s中从右向左查找s[i]第一次出现的位置;
解法二声明:
作者:WTY2002
链接:https://leetcode.cn/problems/first-unique-character-in-a-string/solutions/948758/qiao-yong-stringrong-qi-de-cha-zhao-han-y1507/
来源:力扣(LeetCode)
class Solution {
public:int firstUniqChar(string s) {for(int i = 0; i < s.size() ; i++){if(s.find(s[i]) == s.rfind(s[i])){return i;}}return -1;}
};
相关文章:
【C/C++】涉及string类的经典OJ编程题
【C/C】涉及string类的经典OJ编程题 一. 把字符串转化成整数(atoi)解法一:(不用long)完整代码:解法二:(用long) 二.字符串相加代码实现(含注释)&a…...
淘系等电商平台API接口系列:商品详情数据解析,json数据返回参考
——在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦! 在淘系(如淘宝、天猫)等电商平台中,商品详情数据…...
vue组件之间的数据共享
一、组件之间的关系 1.父子关系 2.兄弟关系 3.后代关系 二、父子组件之间的数据共享 1.父-->子共享数据 父组件通过v-bind属性绑定向子组件共享数据,子组件需要使用props接受数据。 <template><p>父组件</p><Son :msg"msg"…...
LangChain:构建强大的LLM应用的全方位框架
LangChain:构建强大的LLM应用的全方位框架 引言 在人工智能和大语言模型(LLMs)快速发展的今天,开发者们迫切需要一个强大而灵活的框架来简化LLM应用的开发过程。LangChain应运而生,它不仅提供了丰富的工具和组件&…...
自有平台自有品牌如何利用电商API接口做定价参考(多平台商品详情数据接口)
如今,多数自有商城自有品牌在为产品做定价时都会参考淘宝|天猫|京东等主流电商平台的商品价格以做参考,这一行为的好处主要有以下几点: 通过参考主流平台价格,用户更能了解目标市场中消费者对产品的接受度,从而制定出符…...
三万字长文Java面试题——基础篇(注:该篇博客将会一直维护 最新维护时间:2024年9月18日)
🧸本篇博客重在讲解Java基础的面试题,将会实时更新,欢迎大家添加作者文末联系方式交流 📜JAVA面试题专栏:JAVA崭新面试题——2024版_dream_ready的博客-CSDN博客 📜作者首页: dream_ready-CSDN博…...
数学建模——熵权+TOPSIS+肘部法则+系统聚类
文章目录 一、起因二、代码展示 一、起因 我本科的数学建模队长找上我,让我帮她写下matlab代码,当然用的模型还是曾经打比赛的模型,所以虽然代码量多,但是写的很快,也是正逢中秋,有点时间。 当然我也没想到…...
Java | Leetcode Java题解之第403题青蛙过河
题目: 题解: class Solution {public boolean canCross(int[] stones) {int n stones.length;boolean[][] dp new boolean[n][n];dp[0][0] true;for (int i 1; i < n; i) {if (stones[i] - stones[i - 1] > i) {return false;}}for (int i 1…...
828华为云征文|华为Flexus云服务器搭建OnlyOffice私有化在线办公套件
一、引言 在当今数字化办公的时代,在线办公套件的需求日益增长。华为Flexus云服务器凭借其强大的性能和稳定性,为搭建OnlyOffice私有化在线办公套件提供了理想的平台。在2024年9月14日这个充满探索精神的日子里,我们开启利用华为Flexus云服务…...
[Java]maven从入门到进阶
介绍 apache旗下的开源项目,用于管理和构建java项目的工具 官网: Welcome to The Apache Software Foundation! 1.依赖管理 通过简单的配置, 就可以方便的管理项目依赖的资源(jar包), 避免版本冲突问题 优势: 基于项目对象模型(POM),通过一小段描述信息来管理项目的构建 2…...
Leetcode面试经典150题-130.被围绕的区域
给你一个 m x n 的矩阵 board ,由若干字符 X 和 O 组成,捕获 所有 被围绕的区域: 连接:一个单元格与水平或垂直方向上相邻的单元格连接。区域:连接所有 O 的单元格来形成一个区域。围绕:如果您可以用 X 单…...
Ruffle 继续在开源软件中支持 Adobe Flash Player
大多数人已经无需考虑对早已寿终正寝的 Adobe Flash 的支持,但对于那些仍有一些 Adobe Flash/SWF 格式的旧资产,或想重温一些基于 Flash 的旧游戏/娱乐项目的人来说,开源 Ruffle 项目仍是 2024 年及以后处理 Flash 的主要竞争者之一。 Ruffl…...
【postgres】笔记
数据库相关笔记 1.分区表创建时间戳设置问题2.查询语句2.1查询数据库某表有多少行2.2 表中某列值类型是 1.分区表创建时间戳设置问题 今天早上发现postgres数据库表中总会隔4天丢失一天的数据,后来查了一下,发现是分区表创建的有问题。 如图所示 可以看…...
#if等命令的学习
预处理命令 #include(文件包含命令) #define(宏定义命令) #undef #if(条件编译) #ifdef #ifndef #elif #endif defined函数(与if等结合使用) 下面将解释上述各自的用法、使用…...
【有啥问啥】深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法
深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法 0. 引言 Markov Chain Monte Carlo(MCMC)是一类用于从复杂分布中采样的强大算法,特别是在难以直接计算分布的情况下。它广泛应用于统计学、机器学习…...
java企业办公自动化OA
技术架构: sshjbpm 功能描述: 用户管理,岗位管理,部门管理,权限管理,网上交流,贴吧,审批流转。权限管理是树状结构人性化操作,也可以用作论坛。 效果图:...
【leetcode】树形结构习题
二叉树的前序遍历 返回结果:[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,…...
在ros2中安装gazebo遇到报错
安装命令: sudo apt-get install ros-${ROS_DISTRO}-ros-gz 报错如下: E: Unable to locate package ros-galactic-ros-gz 解决方法: 用如下安装命令: sudo apt install ros-galactic-ros-ign 问题解决!...
VMware vSphere 8.0 Update 3b 发布下载,新增功能概览
VMware vSphere 8.0 Update 3b 发布下载,新增功能概览 vSphere 8.0U3 | ESXi 8.0U3 & vCenter Server 8.0U3 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8-u3/,查看最新版。原创作品,转载请保留出处。 作者主页…...
在设计开发中,如何提高网站的用户体验?
在网站设计开发中,提高用户体验是至关重要的。良好的用户体验不仅能提升用户的满意度和忠诚度,还能增加转化率和用户留存率。以下是一些有效的方法和策略: 优化页面加载速度 减少HTTP请求:合并CSS和JavaScript文件以减少HTTP请求…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
