博客
关于我
Leetcode 8. 字符串转换整数 (atoi)
阅读量:243 次
发布时间:2019-03-01

本文共 1449 字,大约阅读时间需要 4 分钟。

为了实现一个能够将字符串转换为整数的 atoi 函数,我们需要处理字符串中的空格、符号和数字字符,并确保正确处理溢出情况。以下是实现步骤和优化后的代码:

实现步骤:

  • 处理空格:首先遍历字符串,跳过所有前面的空格,找到第一个非空格字符的位置。
  • 处理符号:如果第一个非空字符是 '+' 或 '-',记录符号并继续读取后面的数字字符。
  • 读取数字字符:从符号后面开始,读取所有连续的数字字符,直到遇到非数字字符为止。
  • 计算数值:将读取到的数字字符转换为整数值,并检查是否溢出32位有符号整数范围。
  • 处理溢出:如果数值溢出,返回相应的 INT_MAXINT_MIN
  • 返回结果:根据符号和数值计算结果返回整数值。
  • 优化后的代码:

    #include 
    #include
    using namespace std;int myAtoi(string str) { if (str.empty()) return 0; size_t i = 0; // 忽略前面的空格 while (i < str.size() && isspace(str[i])) { i++; } if (i >= str.size()) return 0; // 仅包含空格或空 int sign = 1; if (str[i] == '-') { sign = -1; i++; } else if (str[i] == '+') { i++; } else { // 第一个非空字符不是符号或数字,直接返回0 return 0; } long long num = 0; bool overflow = false; bool has_invalid = false; while (i < str.size() && isdigit(str[i])) { num = num * 10 + (str[i] - '0'); if (num > INT_MAX) { overflow = true; break; } if (num < INT_MIN) { overflow = true; break; } i++; } if (overflow) { return (sign == -1) ? INT_MIN : INT_MAX; } else { return (sign == -1) ? -num : num; }}

    代码解释:

    • 空格处理:使用 isspace 函数跳过前面的空格,找到第一个非空字符。
    • 符号处理:判断符号并记录符号值,继续处理后续字符。
    • 数字处理:读取连续的数字字符,计算数值。在读取过程中检查是否溢出,避免数值超过32位整数范围。
    • 溢出处理:如果数值溢出,返回 INT_MAXINT_MIN
    • 返回结果:根据符号和计算的数值返回最终结果。

    这个函数能够处理各种有效和无效输入情况,确保转换正确或返回默认值0。

    转载地址:http://qjev.baihongyu.com/

    你可能感兴趣的文章
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    NI笔试——大数加法
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>