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

做网站编辑的时候没保存怎么欢迎访问陕西省交通建设集团公司网站

做网站编辑的时候没保存怎么,欢迎访问陕西省交通建设集团公司网站,北戴河网站建设,怎么做社交网站引流到亚马逊Swift 字符串转整数算法题详解:myAtoi 实现与正则表达式对比 🧩 题目背景 LeetCode 上的经典算法题 8. String to Integer (atoi) 是一道考察字符串解析与边界处理的题目。这道题虽看似简单,但处理细节相当复杂。我们将使用 Swift 语言实现…

Swift 字符串转整数算法题详解:myAtoi 实现与正则表达式对比

🧩 题目背景

LeetCode 上的经典算法题 8. String to Integer (atoi) 是一道考察字符串解析与边界处理的题目。这道题虽看似简单,但处理细节相当复杂。我们将使用 Swift 语言实现一个 myAtoi 函数,并分析其实现逻辑,同时引入正则表达式方式作对比,加深理解。


📋 题目要求

实现 myAtoi(_ s: String) -> Int,将字符串转换为 32 位有符号整数,规则如下:

  1. 忽略前导空格
  2. 处理正负号:若下一个字符是 +-,记录符号。
  3. 解析数字:从当前位置开始,读取所有连续数字字符。
  4. 丢弃无效部分:遇到非数字字符即停止。
  5. 边界截断:如果数字超出 Int32 范围,需截断为 Int32.maxInt32.min
  6. 返回最终结果

🛠 原始实现(手动解析法)

func myAtoi(_ s: String) -> Int {let chars = Array(s)var i = 0let n = chars.countvar sign = 1var result = 0// 1. 跳过前导空格while i < n && chars[i] == " " {i += 1}// 2. 处理符号if i < n && (chars[i] == "-" || chars[i] == "+") {sign = chars[i] == "-" ? -1 : 1i += 1}// 3. 解析数字// while i < n && ("0" <= chars[i] && chars[i] <= "9") { 或while i < n, let digit = chars[i].wholeNumberValue {// 溢出检测if result > (Int(Int32.max) - digit) / 10 {return sign == 1 ? Int(Int32.max) : Int(Int32.min)}result = result * 10 + digiti += 1}return result * sign
}

🔍 分步注释说明

  • chars[i].wholeNumberValue:安全判断字符是否为数字。
  • 溢出判断用 (Int32.max - digit) / 10 是防止越界的关键。
  • 全过程不依赖标准库的数字转换函数,便于掌控每一步。

⚡ 使用正则表达式实现(更简洁)

func myAtoiWithRegex(_ s: String) -> Int {let pattern = #"^\\s*([+-]?\\d+)"#if let match = s.range(of: pattern, options: .regularExpression) {let numberStr = String(s[match])let num = Int64(numberStr.trimmingCharacters(in: .whitespaces)) ?? 0if num < Int64(Int32.min) {return Int(Int32.min)} else if num > Int64(Int32.max) {return Int(Int32.max)} else {return Int(num)}}return 0
}

✅ 正则说明

^\\s*        // 匹配前导空格
[+-]?        // 匹配可选符号
\\d+         // 匹配一个或多个数字

正则版本简洁明了,适合快速提取符合格式的数值,但失去对每一步细节的掌控,不能做过细的错误处理和越界防护(比如字符级别的回退分析)。


🤔 小结:手写 vs 正则

方式优点缺点
手动解析法精准控制流程,逐步处理更安全实现稍繁琐
正则表达式代码更短,语义清晰灵活性较低,越界控制需额外处理

🚀 拓展

  • 可以拓展为解析浮点数(myAtof)或科学记数法(如 1.2e3
  • 借助正则表达式快速实现原型,适合处理用户输入、日志、文本分析

📚 参考

  • LeetCode 题解:https://leetcode.com/problems/string-to-integer-atoi/
  • Swift 字符处理:https://developer.apple.com/documentation/swift/string
  • 正则测试工具:https://regex101.com

👨‍🏫 下边给出浮点数&科学记数法代码自取

练习题 1:myAtof —— 字符串转浮点数(小数)

func myAtof(_ s: String) -> Double {let pattern = #"^\s*([+-]?((\d+(\.\d*)?)|(\.\d+)))"#let maxDouble = Double.greatestFiniteMagnitudelet minDouble = -Double.greatestFiniteMagnitudeif let match = s.range(of: pattern, options: .regularExpression) {let numberStr = String(s[match]).trimmingCharacters(in: .whitespaces)if let value = Double(numberStr) {if value > maxDouble {return maxDouble} else if value < minDouble {return minDouble} else {return value}}}return 0.0
}/** 	•	^\s*:匹配开头和任意空格。•	[+-]?:可选的正负号。•	((\d+(\.\d*)?)|(\.\d+)):两种小数形式:•	123.456 或 123.(有整数部分,可有小数)•	.456(无整数部分,必须有小数)*/

练习题 2:mySciToDouble —— 解析科学计数法字符串

func mySciToDouble(_ s: String) -> Double {let maxDouble = Double.greatestFiniteMagnitudelet minDouble = -Double.greatestFiniteMagnitude// 正则:提取科学计数法格式(e 或 E 可选正负号和数字)let pattern = #"^\s*([+-]?((\d+(\.\d*)?)|(\.\d+))([eE][+-]?\d+)?)"#if let match = s.range(of: pattern, options: .regularExpression) {let numberStr = String(s[match]).trimmingCharacters(in: .whitespaces)if let value = Double(numberStr) {if value > maxDouble {return maxDouble} else if value < minDouble {return minDouble} else {return value}}}return 0.0
}
/** 	•	^\s*:匹配开头和任意空格。•	[+-]?:可选的正负号。•	(\d+(\.\d*)?) 整数 + 小数点(如 123.45)•	` (.\d+)`•	[eE][+-]?\d+ 可选科学记数法*/

文章转载自:

http://hzxCINp1.fqyqm.cn
http://gsvZa9fL.fqyqm.cn
http://ZFbHvsVZ.fqyqm.cn
http://RMoSzyfi.fqyqm.cn
http://kgWBcarx.fqyqm.cn
http://rlKD3zUl.fqyqm.cn
http://b52dtYN0.fqyqm.cn
http://ZVTWDgMu.fqyqm.cn
http://4G7BLtiS.fqyqm.cn
http://RhvtAF94.fqyqm.cn
http://I3ijIjFq.fqyqm.cn
http://z7RFv9Bz.fqyqm.cn
http://Fi3BSVVr.fqyqm.cn
http://R6J9VINI.fqyqm.cn
http://rNoZQzCd.fqyqm.cn
http://ItwfZVY7.fqyqm.cn
http://1tR3lfRc.fqyqm.cn
http://9l7iPsxV.fqyqm.cn
http://JOyTvzQm.fqyqm.cn
http://oVjRT1KI.fqyqm.cn
http://FCmPtwDJ.fqyqm.cn
http://MR1U2SBS.fqyqm.cn
http://hKo5AOD2.fqyqm.cn
http://h1sJ4ciw.fqyqm.cn
http://IaX7ZcM8.fqyqm.cn
http://pgR4nCvF.fqyqm.cn
http://C70T1DcF.fqyqm.cn
http://wXW26cVG.fqyqm.cn
http://e7aXMN6m.fqyqm.cn
http://Z84oomIj.fqyqm.cn
http://www.dtcms.com/wzjs/631889.html

相关文章:

  • 永州市建设网站网站能调用一些字体
  • 网站的推广方案的内容有哪些网站管理员是什么意思
  • 科技网站模板老外做牛排的视频网站
  • 建站教程视频下载可以开发哪些网站
  • 建立网站需要什么设备展馆公司
  • 网站建设产品图片尺寸要求东莞seo建站推广费用
  • 网站建站软件在国外做电商网站
  • 临湘做网站长春市防疫最新规定
  • 法拍房北京网站产品设计专业世界大学排名
  • 电子商务网站建设课后习题答案公司网站免费自建
  • wordpress 多语言站点唐山移动互联网开发
  • 长沙网站建设与维护手机网站建设价格是多少
  • 一条龙建站电商运营是干嘛的
  • 电子商务网站建设流程线上运营推广
  • 如何给客户更好的做网站分析wordpress5.0.2图集怎么发布
  • 合肥seo建站住房和城乡建设部网站建造师
  • 广州手机网站开发国外网站源代码
  • 公司建设网站请示wordpress文章标题
  • 上海快速建设网站公司棋牌app开发价格表
  • 百度官方网站网址2.0网站线上建设什么意思
  • 建筑设计参考网站h5页面生成工具
  • 项目建设管理 公司 网站网页设计分为哪几类
  • 中学生网站设计下载可以搭建分站的网站
  • 青岛外贸建设网站云主机和云服务器的区别
  • 岳阳做网站 公司电话ai网页界面设计
  • 临沂网站建设网站推广网站建设发生的费用会计科目
  • 程序员怎么做网站赚钱创意视频制作app
  • 如何做律师网站网站建设中药尽量使用图片
  • 做网站需要提供什么资料个人手机网站开发
  • 游戏网站制作板式射击官网