news 2026/5/12 16:16:04

状态机实例:字符串转换整数 (atoi)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
状态机实例:字符串转换整数 (atoi)

如大家所了解的,状态机,又名有限状态机,自动机

指的是在限定环境中,根据规律抽象成的数学模型。具体的模型可以作为一种状态产生不同的作用,并且状态间可以进行转换。

在许多算法中,尤其是很多字符串相关算法,如 KMP,AC 自动机等,都会使用该思路。并且在各种实际项目的底层逻辑中也是使用的状态机这一模型进行管理。

此处,引入一道比较简单与典型的字符串处理的题目。

字符串转换整数 (atoi)

题意简述:给定一个字符串,将该字符串解析成一个 32 位的整数。规定,可以有前导空格,存在 ± 号的表示,此后读到首个非数字字符表示结束。并将结果收缩到 [−2^{31}, 2^{31} − 1] 间。
类似 C/C++ 中的 atoi 函数,具体的细节描述可以查看上面的链接。

注意:本文对一些细节,如怎么判断数字是否越界等问题不会着重介绍,主要是为了展示状态的表示与转移。

普通流程化写法

整体的处理顺序也比较明朗,用一张流程图来说是这样的:

其实根据题意可以将其分为三大步骤:

1. 处理前导空格

处理完毕后,开始真正的数据处理;

2. 处理正负号

处理完毕后,开始真正的数值处理;

3. 处理数值

处理完毕后,整体处理完毕。作用上正负号标记,就可以获得最终的答案。

class Solution { public: int myAtoi(string s) { const int n = s.size(); int i = 0; // 略过空格 while (i < n && s[i] == ' ') { i += 1; } int sign = 1; // 处理符号 if (i < n && (s[i] == '+' || s[i] == '-')) { sign = (s[i] == '+') ? 1 : -1; i += 1; } int ans = 0; // 遍历,获取答案 for (; i < n; i += 1) { // 遇到首个非数字字符,则终止 if (! isdigit(s[i])) { break; } int digit = s[i] - '0'; // 要到最值了 if (ans > (INT_MAX - digit) / 10) { return (sign == 1) ? INT_MAX : INT_MIN; } ans = ans * 10 + digit; } return ans * sign; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 16:13:38

百度网盘Mac版终极提速指南:免费SVIP插件完整使用教程

百度网盘Mac版终极提速指南&#xff1a;免费SVIP插件完整使用教程 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否厌倦了百度网盘Mac版那令人抓狂…

作者头像 李华
网站建设 2026/5/12 16:13:37

从零构建n8n自动化平台:原生部署与生产环境配置指南

1. 项目概述&#xff1a;为什么我们需要一个独立的 n8n 安装方案&#xff1f;如果你正在寻找一个强大的工作流自动化工具&#xff0c;并且希望完全掌控它的部署环境&#xff0c;那么你很可能已经听说过 n8n。它是一个开源的、基于节点的自动化平台&#xff0c;功能上可以看作是…

作者头像 李华
网站建设 2026/5/12 16:12:06

基于RAG与LangChain的开源知识库聊天机器人构建实战

1. 项目概述&#xff1a;一个开源的、基于知识库的聊天机器人构建平台如果你正在寻找一个能让你用自己的文档、网站内容甚至视频来训练专属聊天机器人的工具&#xff0c;并且希望它完全开源、能私有化部署&#xff0c;那么dialoqbase这个项目值得你花时间研究一下。我最近在搭建…

作者头像 李华
网站建设 2026/5/12 16:10:23

5分钟掌握PPTist:开源在线演示工具的终极指南

5分钟掌握PPTist&#xff1a;开源在线演示工具的终极指南 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allowing for the ed…

作者头像 李华
网站建设 2026/5/12 16:07:36

对比直接使用厂商API体验Taotoken在模型切换上的便捷性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直接使用厂商API体验Taotoken在模型切换上的便捷性 在开发需要集成多个大语言模型的应用时&#xff0c;一个常见的工程挑战是如…

作者头像 李华