[C++初阶]string的几道oj题

1.LCR 192. 把字符串转换成整数 (atoi)

这题难度不大,我这里采取遍历跳过空格的方式,我先展示出我的代码,然后慢慢讲解:

class Solution {
public:int myAtoi(string str) {if (str.empty()) return 0;int length=str.size();int i=0;int symbol=1;int sum=0;while(i<length && str[i]==' '){++i;}if(i<length && str[i]=='+'||str[i]=='-'){if(str[i]=='-')symbol=-1;++i;} while(i<length && isdigit(str[i])){int a=str[i]-'0';if(sum>(INT_MAX-a)/10){if(symbol==1)return INT_MAX;elsereturn INT_MIN;}sum=sum*10+a;++i;}return sum*symbol;}
};

首先我们先排除特殊情况,判断这个string是否为空

下面我们对我们所需要的一些数据进行初始化

length是string的长度

i是遍历的位置

symbol是正负号,1为正号,-1为负号。

sum为最后遍历出的结果计算的和。

做这道题我们首先要理清楚思路,

有以下四种情况需要考虑:

  1. 首部空格: 忽略之即可;
  2. 符号位: 三种情况,即 ''+++'' , ''−-−'' , ''无符号" ;用一个变量保存符号位,返回前判断正负;
  3. 非数字字符: 遇到首个非数字的字符时,直接返回;
  4. 数字字符:

  1.         字符转数字: “此数字的 ASCII 码” 与 '0' 相减即可;
  2.         数字拼接: 若从左向右遍历数字,设当前位字符为 c ,当前位数字为 x ,数字结果为 sum ,则数字拼接公式为:

 x=c-'0'

sum=sum*10+x。

用例的示意图(可能不大准确):

我们先遍历排除开头空格,然后记录符号

接下来我们要记录数字,这里我采用一个自带的函数

判断此时读入的是否为数字,是数字则读入

注意:我们要判断是否超过了int的最大值或最小值,而且要保证自己的int类型不超过int的最大值或最小值

因此,这里我把等式左边的操作移到了等式右边。

如果超出了最值,我们接下来通过symbol的值来判断是最大值还是最小值,然后返回相应结果。

如果读完了所有的数,都没有超出最值,那么我们直接调用上面我们写的公式返回

2.415. 字符串相加

这题明显比上面一道题简单,老规矩,先上代码

class Solution {
public:string addStrings(string num1, string num2) {int i = num1.length() - 1, j = num2.length() - 1, add = 0;string ans = "";while (i >= 0 || j >= 0 || add != 0) {int x = i >= 0 ? num1[i] - '0' : 0;int y = j >= 0 ? num2[j] - '0' : 0;int result = x + y + add;ans.push_back('0' + result % 10);add = result / 10;i -= 1;j -= 1;}reverse(ans.begin(), ans.end());return ans;}
};

首先我们先求出最后一位的下标(string中数的最后一位就是下标最后一位)

同时我们一块定义好我们的进位值,因为我们进行的是10进制计算。大于10要进1,因为一开始,没有进位,所以add=0

我们再创建一个新的string用来存放计算结果:

我们先把string是的数从字符类型转换成数字类型,然后计算(记得加上进位值)

然后我们把它尾插入我们创建的新的string中(这里我选择采用尾插,但也可以用头插(但是头插的时间复杂度更高,因为每次头插都要移动位置))

然后我们调整下标和进位值

最后我们调用reverse函数,翻转一下顺序

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

这题难度也不大,我们之后可以用哈希表来解决,这里我选择采用计数数组来解决这个问题

class Solution {
public:int firstUniqChar(string s) {int count[26] = {0};for(auto ch : s){count[ch-'a']++;}for(int i = 0; i < s.size(); i++){if(count[s[i]-'a'] == 1){return i;}}return -1;}
};

把字符串遍历使对应数组++,然后再次遍历数组输出唯一字符.

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

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

相关文章

Apple强大功能:在新款 iPad Pro 和 iPad Air 中释放 M4 芯片潜力

Apple 的最新强大功能&#xff1a;在新款 iPad Pro 和 iPad Air 中释放 M4 芯片的潜力 概述 Apple 推出配备强大 M4 芯片的最新 iPad Pro 和 iPad Air 型号&#xff0c;再次突破创新界限。新一代 iPad 有望彻底改变我们的工作、创造和娱乐方式。凭借无与伦比的处理能力、令人惊…

QX-mini51单片机学习-----(3)流水灯

目录 1宏定义 2函数的定义 3延时函数 4标准库函数中的循环移位函数 5循环移位函数与左移和右移运算符的区别 6实例 7keil中DeBug的用法 1宏定义 是预处理语句不需要分号 #define uchar unsigned char//此时uchar代替unsigned char typedef是关键字 后面是接分号…

【maven】有些依赖的私有但构建老拉取远程库异常

有时候需要远程依赖包&#xff0c;但是私有包是传统的相互传递的&#xff0c;那么偏偏又去拉远程就会异常&#xff0c;所有进行操作如下

4.用python爬取保存在text中的格式为m3u8的视频

文章目录 一、爬取过程详解1.寻找视频的m3u8链接2.从网页源码中寻找视频的m3u8链接的第二部分内容3.从视频的m3u8链接获取视频 二、完整的代码 一、爬取过程详解 1.寻找视频的m3u8链接 这个文档承接了爬虫专栏的 第一节.python爬虫爬取视频网站的视频可下载的源url&#xff0…

springboot整合rabbitmq的不同工作模式详解

前提是已经安装并启动了rabbitmq&#xff0c;并且项目已经引入rabbitmq&#xff0c;完成了配置。 不同模式所需参数不同&#xff0c;生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。 不同的交换机是实现不同工作模式的关键组件.每种交换…

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…

李廉洋:5.8黄金原油多次小跌,今日必看独家策略。

黄金消息面分析&#xff1a;联储卡什卡利表示&#xff0c;需要更多的数据才能知道通胀回到2%目标的进展是否已经停滞&#xff0c;现在就宣布肯定已经停滞不前还为时过早。卡什卡利说&#xff1a;“我们现在的情况很好&#xff0c;劳动力市场依然强劲&#xff0c;我们可以慢慢获…

【实验3.1]使用Scrapy采集豆瓣读书评分在9分以上的图书数据。 要求采集每本图书的数据,包括图书名、评分、作者、出版社和出版年份。

目录 1.项目代码如图所示&#xff1a; 2.代码详情 __init__.py dbbook.py __init__.py items.py pipelines.py setting.py main.py scrapy.cfg 4.实验前准备&#xff1a; 1.项目代码如图所示&#xff1a; 2.代码详情 __init__.py # This package will contain the…

remmina无法连接远程桌面,Remmina无法连接远程桌面的原因与解决办法

在解决Remmina无法连接远程桌面的问题时&#xff0c;我们需要考虑多种可能的原因&#xff0c;并采取相应的解决办法。以下是一些常见的原因及其对应的解决方案&#xff1a; 1、网络问题 原因&#xff1a;不稳定的网络连接或中断可能导致无法建立远程桌面连接。 解决办法&#x…

stack的使用

1.栈的定义 我们可以看到模板参数里面有一个容器适配器 &#xff0c;什么是适配器&#xff1f;比如充电器就叫做电源适配器&#xff0c;用在做转换&#xff0c;对电压进行相关的转换适配我们的设备。栈&#xff0c;队列不是自己直接管理数据&#xff0c;是让其他容器管理数据&a…

D3CTF2024

文章目录 前言notewrite_flag_where【复现】D3BabyEscapePwnShell 前言 本次比赛笔者就做出两道简单题&#xff0c;但队里师傅太快了&#xff0c;所以也没我啥事。然后 WebPwn 那题命令行通了&#xff0c;但是浏览器不会调试&#xff0c;然后就简单记录一下。 note 只开了 N…

Python专题:四、字符串(1)

str是类 字符串可以是任意内容 &#xff08;单引号&#xff09; ""&#xff08;双引号&#xff09; 三引号可跨行输入 print&#xff08;&#xff09;打印字符串 字符 下面这些也都是字符 字符——>数字&#xff0c;ASCII编码&#xff0c;美国信息交换标准代码&a…