一堆if不及python的一个正则表达式系列

请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:

 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。

注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0 。
提示:

 本题中的空白字符只包括空格字符 ' ' 。
 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

 
示例 1:
输入: "42"
输出: 42

示例 2:
输入: "   -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
     我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

示例 3:
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

示例 4:
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
     因此无法执行有效的转换。
示例 5:
输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
     因此返回 INT_MIN (−231) 。
 
思路:1.判断是否为空字符串
           2.除去前面的空格
           3.注意数据范围
 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每日打卡)的更多相关文章

  1. 17、字符串转换整数 (atoi)

    17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...

  2. 8. 字符串转换整数 (atoi)

    8. 字符串转换整数 (atoi) 方法一 import re import math class Solution(object): def myAtoi(self, str): "&qu ...

  3. LeetCode Golang 8. 字符串转换整数 (atoi)

    8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...

  4. 字符串转换整数 (atoi) C++实现 java实现 leetcode系列(八)

    字符串转换整数 (atoi) java实现 C++实现 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当 ...

  5. 前端与算法 leetcode 8. 字符串转换整数 (atoi)

    目录 # 前端与算法 leetcode 8. 字符串转换整数 (atoi) 题目描述 概要 提示 解析 解法一:正则 解法二:api 解法二:手搓一个api 算法 传入测试用例的运行结果 执行结果 G ...

  6. LeetCode 8. 字符串转换整数 (atoi)(String to Integer (atoi))

    8. 字符串转换整数 (atoi) 8. String to Integer (atoi) 题目描述 LeetCode LeetCode8. String to Integer (atoi)中等 Ja ...

  7. 每日一题LeetCode 8. 字符串转换整数 (atoi)

    问题描述 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将 ...

  8. 【每日一题】【字符串与数字互转】【去除空格】【大数处理】2021年12月12日-8. 字符串转换整数 (atoi)

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

  9. [LeetCode] 8. 字符串转换整数 (atoi)

    题目链接:https://leetcode-cn.com/problems/string-to-integer-atoi/ 题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先 ...

  10. 字符串转换整数 (atoi)

    题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该 ...

随机推荐

  1. Git练习网址

    爲了方便学习git指令,让新手们更容易地理解,所以推荐一些git练习和博文网址 推荐的网址如下 网址一:Learn Git Branching! https://learngitbranching.j ...

  2. Unity的BuildPlayerProcessor:深入解析与实用案例

    Unity BuildPlayerProcessor Unity BuildPlayerProcessor是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自动执行一些操作.这个功能可 ...

  3. OpenUSD联盟:塑造元宇宙的3D未来

    一.引言 近日,美国3D内容行业的五家主要公司苹果.英伟达.皮克斯.Adobe和Autodesk联合成立了OpenUSD联盟(AOUSD).这一联盟的成立标志着元宇宙领域的一次重要合作,旨在制定元宇宙 ...

  4. shell命令-lsof

    前言 lsof是系统管理常用命令,其名指的是list open files,列出打开的文件,而在linux系统,一切皆文件. centos7安装:yum install -y lsof 获取网络信息 ...

  5. 集训后的一些wp

    新生赛后 0x01 2048(jk出发) 修改跳转条件为nop,随便动一下直接打印flag.这个场景我幻想过很久了,一直没做到,这次参考wp做出来了知道怎么做了.学到! 0x02 four(dsact ...

  6. 【io_uring】内核源码分析(更新中)

    文章目录 `io_uring` 系统调用 `io_uring_setup` `io_uring_setup` `io_uring_create` `io_sq_offload_start` 系统调用 ...

  7. API接口的研发与应用

    ​ API(Application Programming Interface,应用程序编程接口)指的是为不同的软件应用程序提供编程接口的一组协议.规则以及工具的集合,以便它们能够互相交互,实现数据通 ...

  8. 【项目源码】JavaWeb网上购书系统

    JavaWeb网上购书系统 介绍 采用JSP.Servlet.MySQL.Tomcat8.0开发的网上购书系统. 软件架构 网上书城主要功能如下: (1) 前台(客户购买)部分: ① 用户管理:注册会 ...

  9. lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga

    1. 概述 CrossLink开发板,是用Lattice的芯片CrossLink 家族系列的,LIF-MD6000-6JM80I.该芯片用于桥接视频接口功能,自带2路MIPI硬核的功能,4 LANE  ...

  10. web组态可视化编辑器

    随着工业智能制造的发展,工业企业对设备可视化.远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现web组态可视化界面成为了主要的技术路径. 行业痛点 对于软件服务商 ...