当前位置: 首页 > news >正文

Leetcode:字符串转换整数 (atoi)

题目链接:8. 字符串转换整数 (atoi) - 力扣(LeetCode)

普通版本(条件限制)

class Solution {
public:
    int myAtoi(string s) {
        int res = 0;
        int i = 0;
        int flag = 1;//假设整数为正
        while(s[i] == ' ')//跳过空格
        {
            i++;
        }
        if(s[i] == '-')//如果空格后的符号为-则将flag变为-1
        {
            flag = -1;
        }
        if(s[i] == '+' || s[i] == '-')//更新完flag后继续向后走(不论+ -)
        {
            i++;
        }
        //没有走到末尾 && 当前位置的字符还是“整数字符”就继续循环
        while(i < s.size() && isdigit(s[i]))
        {
            int r = s[i] - '0';//将当前位置的字符转为整数

            //先判断后插入
            if(res > INT_MAX / 10 ||(res == INT_MAX / 10 && r > 7))//判断当前已经获取的新的数字是否越界
            {
                return flag > 0 ? INT_MAX : INT_MIN;//越界后,若该数原本是负数就返回INT_MIN是正数就返回INT_MAX
            }
            res = res * 10 + r;//每次*10向前移动,使得r插入新数字
            i++;
        }
        return flag > 0 ? res : -res;//获取完毕后,原本该数是正数就返回res,是负数就返回(-1) * res
    }
};

优化版本(确定有限状态机,待补充) 

抽象版本(巧妙运用cin)

class Solution {
public:
    int myAtoi(string s) {
        stringstream liu(s);
        int n=0;
        liu>>n;//通过>>操作符,stringstream类型的对象liu会尝试从字符串流中提取一个整数,并将其存储在变量n中
        return n;
    }
};
  • 文档:stringstream - C++ Reference (cplusplus.com)
  • std::stringstream是C++标准库中的一个类,它允许将字符串作为流来处理,可以方便地进行字符串和其他数据类型(比如整数、浮点数)之间的转换

读取规则:

①忽略字符串开头的空格,直到遇到第一个非空格字符为止

②遇到- / +符号时,它会识别这是一个负 / 正数

③继续读取数字字符,直到遇到非数字字符为止(042的0也会读取,出去的时候会消去)

④将这些数字字符转换为整数,并考虑之前识别的负号

~over~

相关文章:

  • 软件开发整体介绍
  • Java中连接Mongodb进行操作
  • iOS Hittest 机制和实际应用之一 hittest方法
  • 【魅力网页的背后】:CSS基础魔法,从零打造视觉盛宴
  • ChatGPT-3
  • 【开源】新生报到网站 JAVA+Vue.js+SpringBoot+MySQL
  • 【原创】springboot+mysql员工管理系统
  • springboot基础及上传组件封装
  • 数据结构-堆(带图)详解
  • 制作ChatPDF之Elasticsearch8.13.4搭建(一)
  • 解决TrueNas Scale部署immich后人脸识别失败,后台模型下载异常,immich更换支持中文搜索的CLIP大模型
  • leetcode1:两数之和
  • Android manifest清单文件意外权限来源和合并规则
  • 设计模式之桥接模式
  • 单片机原理及应用复习
  • AI前沿技术探索:智能化浪潮下的创新与应用
  • 首套真题解析!安徽211难度适中!两门课!
  • 第十三章 进程与线程
  • 冒泡排序与快速排序
  • 基于昇腾910B训练万亿参数的语言模型简介
  • 兰州网站卡法/网站是怎么优化推广的
  • 视频网站怎么做排名/专业seo网站
  • wordpress首页调用文章多张图片/上海城市分站seo
  • 如何建设网站子页/昆明百度推广开户费用
  • 大型网站开发软件/短视频精准获客系统
  • 深圳网站建设哪里/排名sem优化软件