字符串转换整数(atoi)(4.3leetcode每日打卡)
一堆if不及python的一个正则表达式系列
如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
本题中的空白字符只包括空格字符 ' ' 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
输出: 42
示例 2:
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
示例 3:
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
示例 4:
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。
1 #define INT_MAX 2147483647
2 #define INT_MIN -2147483648
3
4 int myAtoi(char* str)
5 {
6 int i = -1;
7 int cnt = 0;
8 int nowVal;
9 long long returnVal = 0;
10 int len = strlen(str);
11 if (strcmp(str, "") == 0) //如果字符串为空
12 {
13 return 0;
14 }
15 while ((str[++i] == ' ')) //遍历所含空格
16 {
17 if (str[i] != ' ')
18 break;
19 }
20 if ((str[i] > 'a' && str[i] < 'z') || (str[i] > 'A' && str[i] < 'Z') || str[i] == ' ')//第一个非空字符是字母
21 {
22 return 0;
23 }
24 if (i == len) //全是空白字符
25 {
26 return 0;
27 }
28 if ((str[i] == '-') || (str[i] > '0' && str[i] <= '9') || str[i] == '+' || str[i] == '0') //遇到负号或者直接遇到数字
29 {
30 int flag = 0;
31 int temp;
32 if (str[i] == '-') //有负号
33 {
34 flag = 1;
35 }
36 if (str[i] == '+') //有正号
37 {
38 flag = 2;
39 }
40 if (flag == 1 || flag == 2) //有负号或者正号
41 {
42 temp = i + 1;
43 }
44 else
45 {
46 temp = i;
47 }
48 nowVal = temp; //主要防止200000000000000000000这种直接超出long long的情况 直接计数大于9则直接返回最大值 不再累加以免溢出
49 for (int j = temp; isdigit(str[j]) != 0; j++)
50 {
51 if (str[nowVal] != '0') //0000000000001234也不计数
52 {
53 cnt++;
54 }
55 if (cnt > 10)
56 {
57 if (flag == 1) //负最大值
58 {
59 return INT_MIN;
60 }
61 else if (flag == 2 || flag == 0) //正最大值,带'+'或者不带符号
62 {
63 return INT_MAX;
64 }
65 }
66 returnVal = returnVal * 10 + (str[j] - 48);
67 }
68 if (returnVal > INT_MAX)
69 {
70 if (flag == 1)
71 {
72 return INT_MIN;
73 }
74 else
75 {
76 return INT_MAX;
77 }
78 }
79
80 if (flag == 1)
81 return -returnVal;
82 else
83 return returnVal;
84 }
85 return 0;
86 }
字符串转换整数(atoi)(4.3leetcode每日打卡)的更多相关文章
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 方法一 import re import math class Solution(object): def myAtoi(self, str): "&qu ...
- LeetCode Golang 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...
- 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)
字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...
- 前端与算法 leetcode 8. 字符串转换整数 (atoi)
目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...
- LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))
8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...
- 每日一题LeetCode 8. 字符串转换整数 (atoi)
问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...
- 【每日一题】【字符串与数字互转】【去除空格】【大数处理】2021年12月12日-8. 字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数). 函数 myAtoi(string s) 的算法如下: ...
- [LeetCode] 8. 字符串转换整数 (atoi)
题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...
- 字符串转换整数 (atoi)
题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...
随机推荐
- .net通用RSA加密工具类
目前最流行的加密算法莫过于RSA了,以下是我们.net/.net core C#生成环境用的RSA加密工具类,在此分享给大家. using System; using System.IO; using ...
- sudo提权操作
sudo提权操作 sudo sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用户的登录 ...
- *CTF和nssctf#16的wp
*ctf2023 fcalc 分析程序 本题存在漏洞,是生活中很容易犯的错误,就是循环或者判断的时候没有注意多一还是少一,这种会发生很严重的问题.比如这个题在过滤数字的时候没有过滤掉0,所以输入0的时 ...
- module.exports和exports,应该用哪个
在 Node.js 编程中,模块是独立的功能单元,可以在项目间共享和重用.作为开发人员,模块让我们的生活更轻松,因为我们可以使用模块来增强应用程序的功能,而无需亲自编写.它们还允许我们组织和解耦代码, ...
- 【NestJS系列】连接数据库及优雅地处理响应
前言 Node作为一门后端语言,当然也可以连接数据库,为前端提供CURD接口 我们以mysql为例,自行安装mysql TypeORM TypeORM 是一个ORM框架,它可以运行在 NodeJS.B ...
- 淘宝商品详情 API的使用说明
淘宝平台提供了 API 接口可以用于获取淘宝商品详情信息.通过 API 接口,我们可以获取到商品的基本信息.价格.评论及评价等详细信息.以下是使用说明: 获取淘宝API账号 在获取淘宝商品详情 API ...
- openNebula集群搭建
openNebula集群搭建 目录 openNebula集群搭建 OpenNebula概述 环境介绍及部署前准备 1. 安装步骤 1.关闭防火墙 2.配置epel源地和opennebula源 3.安装 ...
- 谷粒商城微服务分布式高级篇:linux下使用docker安装ElasticSearch
[root@localhost ~]# docker pull elasticsearch:7.8.0 安装elasticsearch:7.8.0[root@localhost ~]# docker ...
- Linux——Linux必备的基础知识总结
文章目录 一.Linux操作系统概述 1.发展 2.组成 3.Linux的特性: 二.Linux操作系统安装 1.Linux的选择 2.安装Ubuntu Desktop 3.基本操作 三.Linux文 ...
- Vue2系列(lqz)——6-Vue-cli、7-Vue插件、8-Vue第三方框架之ElementUi
文章目录 6 Vue-CLI 项目搭建 1 单文件组件 2 Vue-CLI 项目搭建 2.1 环境搭建 2.2 项目的创建 创建项目 启动/停止项目 打包项目 package.json中 2.3 认识 ...