C++ 把字符串转换成整数 (atoi) - 力扣(LeetCode)

news2024/9/22 11:53:38

点击链接即可查看:LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode)

一、题目

        请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。

函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231,  231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ' ' 。
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:

输入:s = "42"
输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"42"(读入 "42")
           ^
解析得到整数 42 。
由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。

示例 2:

输入:s = "   -42"
输出:-42
解释:
第 1 步:"   -42"(读入前导空格,但忽视掉)
            ^
第 2 步:"   -42"(读入 '-' 字符,所以结果应该是负数)
             ^
第 3 步:"   -42"(读入 "42")
               ^
解析得到整数 -42 。
由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。

示例 3:

输入:s = "4193 with words"
输出:4193
解释:
第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
             ^
解析得到整数 4193 。
由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' ''+''-' 和 '.' 组成

二、解题思路以及代码 

        对于越界问题,我们可以采用longlong来避免,以及他给定的范围是INT_MAX和INT_MIN,不知道这两个值,可以打在vs上面,鼠标悬停即可查看!

class Solution {
public:
    int myAtoi(string str) 
    {
        int i = 0;
        int flag = 1;
        long long ret = 0;
        int count = 0;
        if(str.size() == 0)//为空,直接返回0
            return 0;
        while(' '== str[i])
        {
            i++;
        }
        if('-' == str[i]) 
        {
            flag = -1;
            i++;
            count++;
        }
        if('+' == str[i]) 
        {
            i++;
            count++;
        }
        //有正号有负号,直接返回0
        if(count == 2)
            return 0;
        while('0' == str[i])
        {
            i++;
        }
        while(i < str.size() && str[i] <= '9' && str[i] >= '0')
        //while(i < str.size() && isdigit(str[i]))
        {
            ret = ret * 10 + (str[i] - '0');
            if (ret >= INT_MAX && flag == 1) 
                return  INT_MAX;
            if (-ret < INT_MIN && flag == -1) 
                return  INT_MIN;
            i++;
        }
        return ret * flag;
    }
};

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

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

相关文章

基于协同过滤算法的商品推荐系统

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着互联网技术的飞速发展&#xff0c;用户每天面临的信息量呈爆炸式增长&#xff0c;如何有效地筛选出用户感兴趣的内容成为一大挑战。在此背景下&#xff0c;基于协同过滤算法的商品推荐系统应运而生。该系统通过…

Th:1.1 建立连接

基础讲解 1.TCP通信流程 基于TCP通信的Socket基本流程: 1.1 Socket 函数返回值&#xff1a;一个文件描述符&#xff1a; 特别的两个队列。 #include <sys/types.h> #include <sys/socket.h> //create an endpoint for communication int socket(int …

【Mysql】Centos 安装 Mysql8.0

官网下载安装包 官网地址&#xff1a;MySQL :: Download MySQL Community Server 查看服务器的名称和版本号 lsb_release -a 查看服务的架构 uname -m 下载对应的版本&#xff0c;这里操作系统选择 Red Hat 就可以了。&#xff08;CentOS 就是将 RHEL 发行的源代码从新编译…

基于redis的HyperLogLog数据结构实现的布隆过滤器在信息流中历史数据的应用

一、基于redis的HyperLogLog数据结构实现的布隆过滤器在信息流中历史数据的应用 做信息流服务端的左发一定会遇到用户历史数据的集合&#xff0c;对于一些有限信息流&#xff08;因DT数据中心的推荐数据变化较慢&#xff0c;推荐量不大&#xff09;&#xff0c;历史数据可以使用…

Abaqus 2024百度云下载:附中文安装包+教程

正如大家所熟知的&#xff0c;Abaqus是一款有限元分析软件&#xff0c;能够高效的配合工程师完成创作。它可以高精度地实现包括金属、橡胶、高分子材料、复合材料、钢筋混凝土、可压缩超弹性泡沫材料以及土壤和岩石等地质材料的工程仿真计算。 “Abaqus”不仅具有出色的仿真计…

TomCat乱码问题

TomCat控制台乱码问题 乱码问题解决&#xff1a; 响应乱码问题 向客户端响应数据&#xff1a; package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…

【pyVista】在三维模型中的网格属性

一&#xff0c;什么是属性&#xff1f; 属性是存在于 一个网格。在 PyVista 中&#xff0c;我们同时使用点数据和单元数据&#xff0c;并且 允许轻松访问数据字典以保存属性数组 它们位于网格的所有点或所有单元上。 点数据 点数据是指值数组&#xff08;标量、向量等&#x…

https的连接过程

根证书: 内置在操作系统和浏览器中,可手动添加,下级是中间证书或服务器证书,只有当中间证书或服务器证书关联到已存在的根证书时,中间证书或服务器证书才视为有效 中间证书: 位于根证书和服务器证书之间,他们之间也可以没有中间证书,作用是对根证书增加一个下级,方便管理,由根…

一款批量下载 B 站动态页图片的脚本

在逛 B 站的时候&#xff0c;总能看到不少 UP 会发很多图片&#xff0c;此时一个一个保存非常麻烦&#xff0c;而且文件名都是随机的字符串&#xff0c;还得手工重命名。 为此&#xff0c;特地搜索了下有没相关的浏览器插件或油猴脚本&#xff0c;还真给我找到一个。 脚本地址…

Kafka 下载安装及使用总结

1. 下载安装 官网下载地址&#xff1a;Apache Kafka 下载对应的文件 上传到服务器上&#xff0c;解压 tar -xzf kafka_2.13-3.7.0.tgz目录结果如下 ├── bin │ └── windows ├── config │ └── kraft ├── libs ├── licenses └── site-docs官方文档…

专注并不意味只做一件事

原创内容第658篇&#xff0c;专注量化投资、个人成长与财富自由。 财务自由本身就是一个很有争议的领域。 有谁能靠别人实现财富自由呢&#xff1f; 这个逻辑起点本身就有问题。 如果预期正确&#xff0c;那这些自媒体还是有用处的。 好比我现在对于阅读和书籍的预期&…

深入解析 Apache Doris架构、应用场景与最佳实践

一、Doris 简介 Apache Doris 是一款现代化的 MPP&#xff08;Massively Parallel Processing&#xff09;数据库&#xff0c;专注于解决大规模数据分析和实时查询的需求。它最初源自百度的 Palo 项目&#xff0c;随后贡献给了 Apache 基金会&#xff0c;并在开源社区的共同努…

『功能项目』QFrameWork框架重构OnGUI【63】

我们打开上一篇62QFrameWork背包框架的项目&#xff0c; 上文将功能实现在一个脚本中 本章要做的事情让脚本实现背包框架思想 首先按照图示创建脚本&#xff1a; 创建脚本&#xff1a;Item.cs namespace QFramework {public class Item{//道具public string Key;public string …

【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显式网格与隐式网格(中)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)

绝妙&#xff01;快慢指针法,快指针先走n步&#xff08;复杂度O(n),O(1))&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(n…

GS-SLAM论文阅读笔记--TAMBRIDGE

前言 本文提出了一个自己的分类方法&#xff0c;传统的视觉SLAM通常使用以帧为中心的跟踪方法&#xff0c;但是3DGS作为一种高效的地图表达方法好像更侧重于地图的创建。这两种方法都有各自的优缺点&#xff0c;但是如果能取长补短&#xff0c;互相结合&#xff0c;那么就会是…

STM32精确控制步进电机

目的&#xff1a;学习使用STM32电机驱动器步进电机&#xff0c;进行电机运动精确控制。 测试环境&#xff1a; MCU主控芯片STM32F103RCT6 &#xff1b;A4988步进电机驱动器模块&#xff1b;微型2相4线步进电机10mm丝杆滑台&#xff0c;金属丝杆安装有滑块。 10mm二相四线微型…

我的AI工具箱Tauri版-FasterWhisper音频转文本

本教程基于自研的AI工具箱Tauri版进行FasterWhisper音频转文本服务。 FasterWhisper音频转文本服务 是自研AI工具箱Tauri版中的一款模块&#xff0c;专门用于将音频或视频中的语音内容自动转化为文本或字幕。通过简单的配置&#xff0c;该工具能够批量处理大量音频或视频文件&…

高密原型验证系统解决方案(下篇)

0 引言 我们在上篇中和大家探讨了用户在进行大规模 复杂 SoC 设计原型验证时在全局时钟及复位同步&#xff0c; 大规模设计分割以及高速接口与先进 Memory 控制 器 IP 验证等方面遇到的关键困难&#xff0c;并提出了相应的 解决方案帮助用户来克服这些困难。接下来我们会 和用户…

OpenCV运动分析和目标跟踪(2)累积操作函数accumulateSquare()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将源图像的平方加到累积器图像中。 该函数将输入图像 src 或其选定区域提升到2的幂次方&#xff0c;然后加到累积器 dst 中&#xff1a; dst ( …