【小菜鸡刷题记】--字符串篇

news2024/11/25 5:21:49

【小菜鸡刷题记】:字符串

  • 剑指 Offer 05. 替换空格
  • 剑指 Offer 58 - II.左旋转字符串
  • 剑指 Offer 20.表示数值的字符串
  • 剑指 Offer 67. 把字符串转换成整数

特此声明:题目均来自于力扣

剑指 Offer 05. 替换空格

题目链接
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”

class Solution {
public:
    string replaceSpace(string s) {
        string str;
        for(int i=0;i<s.size();++i)
        {
            if(s[i]==' ')
            {
                str+="%20";
            }
            else
            {
                str+=s[i];
            }
            
        }
        return str;
    }
};

剑指 Offer 58 - II.左旋转字符串

剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

输入: s = “abcdefg”, k = 2
输出: “cdefgab”

//三步翻转法
class Solution {
public:
    string reverseLeftWords(string s, int n) {
        int k=n%s.size();
        //反转前半段
        reverse(s.begin(),s.begin()+k);
        //反转后半段
        reverse(s.begin()+k,s.end());
        //整体反转
        reverse(s.begin(),s.end());
        return s;
    }
};

//字符串拼接法
class Solution {
public:
    string reverseLeftWords(string s, int n) {
        return s.substr(n)+s.substr(0,n);
    }
};

剑指 Offer 20.表示数值的字符串

剑指 Offer 20. 表示数值的字符串

在这里插入图片描述

解题思路:数值可以表示为A [ . [ B ] ] [ E | e C ]或者.B [ e | E C ]
其中A是这个数值的整数部分,B是小数点后及e之前的小数部分,C是e的指数部分;
整数部分不是必须的
以数值字符串123.45e+6为例:123为整数部分A,45为小数部分B,+6为指数部分C

class Solution {
public:
    //匹配正负号
    bool isInteger(string& s)
    {
        if(s[0]=='+'||s[0]=='-')
            s.erase(0,1);
        return Isdigit(s);  
    }
    //判断是否出现数字
    bool Isdigit(string& s)
    {
        int i=0;
        while(s[i]!='\0'&&isdigit(s[i]))
        {
            i++;
        }
        s=s.substr(i);
        return i>0;
    }

    void EraseSpace(string& s)
    {
        //去除首尾空格
        int i = 0;
        while (i < s.size() && s[i] == ' ')
            i++;
        s = s.substr(i);
        while (s.back() == ' ')
            s.pop_back();
    }
    bool isNumber(string s) {
        if(s=="") return false;

        EraseSpace(s);

        //判断是否出现‘+’‘-’数字,并原地修改字符串
        bool Integer=isInteger(s);

        //如果出现.,证明到了小数部分
        if(s[0]=='.')
        {
            s.erase(0,1);
            // ||的原因
            // 1:9.  等于9.0
            // 2:9.9 正常数值
            // 3:.9  等于0.9
            Integer=Isdigit(s)||Integer;
        }
        //如果出现‘e’"E",指数部分
        if(s[0]=='e'||s[0]=='E')
        {
            s.erase(0,1);

            //用&&的原因
            // 1.e前面没有整数:.e6、e6不能表示数字
            // 2.e的后面没有整数: 6e、6e3不能表示数字
            Integer=Integer&&isInteger(s);
        }
        //特殊情况:如果e后面有小数点,会在s=="\0"这一步判断失败
        return Integer && s=="\0";
    }
};

剑指 Offer 67. 把字符串转换成整数

剑指 Offer 67. 把字符串转换成整数

写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。
在这里插入图片描述
考虑特殊输入,如字符串是一个""、"\0" "0" "+0" "-0"
我定义了一个枚举类型以及一个全局变量用来分辨是否是合法输入

enum{IsUnlawful=0,IsLawful};//判断是否是非法输入
static  int g_state=Islawful;
class Solution {
public:
    
    int strToInt(string str) {
		int g_state=IsUnlawful;//非法输入
        long long num=0;
        int i=0;
        if(str !="" && str!="\0")
        {
            bool flag=true;//正数
            while(str[i]==' ')//去空格
            {
                ++i;
            }
            if(str[i]=='+')//判断符号
            {
                i++;
            }
            else if(str[i]=='-')
            {
                i++;
                flag=false;
            }
            if(str[i]!='\0')//+-'\0';
            {
                num=DigitToStr(str,i,flag);//转换
            }

        }
        //cout<<g_state<<endl;这里进用来测试是非法输入还是合法输入
        return static_cast<int>(num);
    }
    long long DigitToStr(string& s,int& i,bool flag)
    {
        long long num=0;
        while(s[i]!='\0')
        {
            if(isdigit(s[i]))
            {
                int ret=flag==true? 1:-1; 
                num=10*num+(s[i]-'0')*ret;
                //判断是否越界
                if(num>INT_MAX&&flag)
                {
                    return INT_MAX;
                }
                if(num<INT_MIN&&!flag)
                {
                    return INT_MIN;
                }
            }
            
            if(!isdigit(s[i]))//异常结束;我这里把 "4193 with words"、"words and 987"看成一种情况
            {
                break;
            }
            ++i;
            if(s[i]=='\0')//正常结束
            {
            	//设置为合法输入
                g_state=IsLawful;
            }
            
        }

        return num;
    }
};

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

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

相关文章

【JUC基础】06. 生产者和消费者问题

1、前言 学习JUC&#xff0c;就不得不提生产者消费者。生产者消费者模型是一种经典的多线程模型&#xff0c;用于解决生产者和消费者之间的数据交换问题。在生产者消费者模型中&#xff0c;生产者生产数据放入共享的缓冲区中&#xff0c;消费者从缓冲区中取出数据进行消费。在…

MySQL同时In俩个字段,In多个字段,Mybatis多个In查询问题,Mysql多个IN查询多出数据问题,Mysql多个IN查询 数据准确问题

背景&#xff1a; 今天产品验收的时候&#xff0c;导入了大量数据&#xff1b;发现造价项目某个查询列表数据多出了几条数据&#xff1b;看了Mybatis查询&#xff0c;才发现是同时使用了多个IN查询导致的问题&#xff1b;入参是对象列表&#xff0c;In值是分开循环赋值…

【SpringBoot整合RabbitMQ(上)】

一、简单的生产者-消费者 1.1、创建连接工具类获取信道 public class RabbitMqUtils {public static Channel getChannel() throws IOException, TimeoutException {//创建一个链接工厂ConnectionFactory factory new ConnectionFactory();//工厂IP 链接RabbitMQ的队列facto…

google_breakpad库的基本使用

参考链接&#xff1a; windows下捕获dump之Google breakpad_client的理解Google Breakpad&#xff1a;基本介绍和操作方法Breakpad 入门linux下用QT捕获程序异常 简介 github 地址 三大组件 client:读取当前线程的状态、加载的可执行文件、共享库等信息&#xff0c;写入到…

Azure深层防御

深层防御的目的是保护信息&#xff0c;防止未经授权访问信息的人员窃取信息。 深层防御策略使用一系列机制来减缓攻击进度&#xff0c;这些攻击旨在获取对数据的未经授权的访问权限。 深层防御层 可以将深度防御可视化为一组层&#xff0c;并将要保护的数据放在中心&#xf…

一篇文章搞定ftp、dns服务器

一篇文章搞定ftp、dns服务器 1、ftp 安装ftp 挂载centos镜像cd /media/CentOS_6.8_Final/Packages安装命令&#xff1a;[rootlocalhost Packages]# rpm -ivh vsftpd-2.2.2-21.el6.x86_64.rpm Vsftpd配置目录为/etc/vsftpd&#xff0c;其中包含下面几个文件 /var/ftp/&#xf…

awk命令编辑

awk工作原理 逐行读取文本&#xff0c;默认以空格或tab键分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理&#xff0c;而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息…

做网工10年,没人在30岁前和我讲这些(一)

晚上好&#xff0c;我是老杨。 23年才刚过几天&#xff0c;我就感觉自己又上了点年纪&#xff0c;时常面对年纪比较小的粉丝&#xff0c;无意识的面露慈爱的笑容。 还是每次小冬提醒我&#xff0c;我才发现我的表情不对劲。 我对年轻人的包容度是很强的&#xff0c;尤其是一…

VMware、CentOS、XShell、Xftp的安装

第 1 章 VMware 1.1 VMware 安装 一台电脑本身是可以装多个操作系统的&#xff0c;但是做不到多个操作系统切换自如&#xff0c;所以我们 需要一款软件帮助我们达到这个目的&#xff0c;不然数仓项目搭建不起来。 推荐的软件为 VMware&#xff0c;VMware 可以使用户在一台计…

DNS正反向解析

正向解析 1.准备工作 关闭Selinux服务和firewalld服务 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld 修改服务器与客户端的IP为静态IP地址 [rootserver ~]# nmcli connection modify ens160 ipv4.method manual ipv4.address …

剑指offer 19. 正则表达式匹配

文章目录 1. 题目描述2. 解题思想3. 设置dp初始值4.代码实现 1. 题目描述 2. 解题思想 定义dp数组 dp[i][j]&#xff1a;表示当字符串长度i&#xff0c;j是&#xff0c;s与p是否匹配 确定递推公式 核心是s[i]要与p[j]进行比较&#xff0c;比较的结果来确定 dp数组的值&#xf…

STM32-ADC多通道输入实验

之前已经介绍了几个ADC的笔记和实验了&#xff0c;链接如下&#xff1a; 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 STM32-单通道ADC采集&#xff08;DMA读取&#xff09;实验_Mr_rustylake的博客-CSDN博客 接下来…

NodeJs基础之NRM与NPM

nrm nrm can help you easy and fast switch between different npm registries, now include: npm, cnpm, taobao, nj(nodejitsu). 译文&#xff1a;nrm可以帮助您在不同的npm注册表之间轻松快速地切换&#xff0c;现在包括&#xff1a;npm、cnpm、taobao、nj&#xff08;no…

编译安装及yum安装

一、编译安装 源码包&#xff1a;是由程序员按照特定格式和语法编写的包 二进制包:源码包经过成功编译之后产生的包 1.tar -xf httpd-2.4.29.tar.bz #解压源码包 2.安装依赖环境 3.配置安装路径 4.编译make并安装 5.关闭防火墙&#xff0c;和安全机制 6.开启服务器 7.…

全电发票时代,记账凭证不用再打印了!

—政策通告— 为进一步推进电子发票应用和推广实施工作&#xff0c;助力国家数字经济发展&#xff0c;国家档案局会同财政部、商务部、国家税务总局总结三批增值税电子发票电子化报销、入账、归档试点经验&#xff0c;依据国家相关法律法规和标准规范&#xff0c;编制形成了《…

KMP匹配算法

目录 一、暴力匹配法动画演示代码实现 二、KMP算法的概念三、KMP算法的应用题目代码实现 一、暴力匹配法 动画演示 时间复杂度为&#xff1a; O ( m ∗ n ) O(m * n) O(m∗n) 代码实现 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std;int…

Revit API:ErrorHandling

前言 本文介绍 Revit 的错误处理机制。 内容 程序员对错误处理的定义和理解 程序的错误处理机制可以分为两种类型&#xff1a;错误返回码和异常捕捉。 错误返回码是指在程序中遇到错误时&#xff0c;通过函数返回值来表明错误的类型和信息。错误返回码可以在程序中被预测和…

分段存储管理方式

目录 一、分段存储管理方式的引入的需求: 1.方便编程 2.信息共享 3.信息保护 4.动态增长 5.动态链接 二、分段系统的基本原理 1.分段 2.段表 3.地址变换机构 4.分页与分段的主要区别 三、信息共享 四、段页式存储管理方式 1.基本原理 2.地址变换过程 分段与分页…

Spring实现IOC和DI入门案例(XML版)

文章目录 1 IOC入门案例(XML版)1.1 思路分析1.2 代码实现步骤1:创建Maven项目步骤2:添加Spring的依赖jar包步骤3:添加案例中需要的类步骤4:添加spring配置文件步骤5:在配置文件中完成bean的配置步骤6:获取IOC容器步骤7:从容器中获取对象进行方法调用步骤8:运行程序 2 DI入门案例…

AltTab for Mac 像Windows一样的窗口快速切换工具

AltTab for Mac AltTab for Mac 是一款非常好用的窗口快速切换工具&#xff0c;AltTab将Windows的 “Alt-Tab” 窗口切换器的功能引入到了macOS。可以让您更快的在各个程序之间自由切换&#xff0c;大大提高您的工作效率。 AltTab for Mac下载 AltTab for Mac AltTab for Ma…