Swift算法实现字符串转数字的方法示例

 更新时间:2017年03月21日 11:31:17   作者:李峰峰博客  
最近学完了swift想着实践下,就通过一些简单的算法进行学习研究,下面这篇文章主要介绍了Swift算法实现字符串转数字的方法,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

最近学完Swift之后一直没有机会实战,发现由于Swift发展历史原因,目前网上大部分的算法都是使用C、Java或其他语言实现的,几乎没有使用Swift实现的,所以自己打算使用Swift去实现一些主流的算法,既是对自己Swift的回顾,也是对自己算法方面的提高。

首先是用Swift实现字符串转数字,当然,肯定是不能使用Swift自带的字符串转数字的api。

题目:

使用Swift实现一个方法,输入字符串,输出该字符串转换成的数字。

例如,输入字符串“125”,输出数字125

实现思路及代码

首先先考虑可能输入情况,包括非法输入:

     情况1:所有字符均可直接转换成数字,如”125″

     情况2:包含一个或多个正负号,如”-125″、”–+125″

     情况3:包含非法字符,如”125lff”

如果是情况1,处理起来将会非常简单:首先利用ASCII编码将字符串“125”的每个字符转换为数字,之后转换成数字后直接用乘法和加法即可:1*100+2*10+3=123。

但是实际情况并不那么简单,由于情况2和情况3的存在,上面直接用乘法和加法肯定不可行的,中间还得加上相应的判断。最佳的方式是我们直接遍历字符串中的字符,先假设没有正负号和非法字符的存在,当遍历到第一个字符”1″的时候,intStr=1,当遍历到第二个字符”2″的时候,intStr = intStr*10+2=12,当遍历到最后一个字符”3″的时候,intStr = intStr*10+3=123。

关于”+”和”-“,只有当它们在字符串的开头的时候才表示正负,在字符串中间存在就是非法字符。我们可以通过ASCII编码判断”+”和”-“(对应的值分别为43和45),设个变量s表示多个”+”和”-“累积之后的正负。最后结果为intStr = s * intStr。当遍历字符串过程中发现了非法字符,则终止后续遍历,并给出提示。

实现代码:

//字符串转数字
func StrToInt(str:String) -> Int{
 
 //字符串不能为空
 guard str.isEmpty == false else {
 print("字符串不能为空~");
 return 0;
 }
 
 var s = 1
 var strInt:Int? = nil
 
 for characterInt in str.unicodeScalars {
 
 //只能包含数字或正负号
 let tempStrInt = characterInt.hashValue - "0".unicodeScalars.first!.hashValue
 guard (tempStrInt <= 9 && tempStrInt >= 0) || (characterInt.hashValue == 43 || characterInt.hashValue == 45) else {
  
  print("包含非法字符!");
  return 0;
  
 }
 
 //正负号只能存在于字符串开头
 if characterInt.hashValue == 43 || characterInt.hashValue == 45 {
  guard strInt == nil else {
  print("正负号只能存在于字符串开头!");
  return 0;
  }
 }
 
 //既然走到这一步,说明字符串合法
 //判断正负数
 if characterInt.hashValue == 43 || characterInt.hashValue == 45{
  s = s * ( 44 - characterInt.hashValue )
 }else{
  
  if strInt == nil {
  strInt = characterInt.hashValue - "0".unicodeScalars.first!.hashValue
  }else{
  //使用溢出运算符&*和&+避免数值过大导致溢出崩溃
  strInt = strInt! &* 10 &+ ( characterInt.hashValue - "0".unicodeScalars.first!.hashValue ) 
  }
 
 }
 
 }
 
 var result:Int? = 0
 if strInt != nil {
 result = s * strInt!
 }
 
 return result!;
}

在上述实现的算法中:

      输入”125″,输出125

      输入”+-125″,输出-125

      输入”1-25″,提示”正负号只能存在于字符串开头!”

      输入”1m25″,提示”包含非法字符”

总结

以上就是关于Swift算法实现字符串转数字的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 超全面的Swift编码规范(推荐)

    超全面的Swift编码规范(推荐)

    这篇文章主要给大家介绍了关于Swift编码规范的相关资料,文中介绍的非常详细,对大家开发swift具有一定的参考价值,需要的朋友可以参考学习,下面来一起看看吧。
    2017-03-03
  • SwiftUI学习之state和Binding的区别浅析

    SwiftUI学习之state和Binding的区别浅析

    这篇文章主要给大家介绍了关于SwiftUI学习之state和Binding区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 关于Swift 4.1中的Codable改进详解

    关于Swift 4.1中的Codable改进详解

    这篇文章主要给大家介绍了关于Swift 4.1中的Codable改进的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-02-02
  • 简单了解Swift语言中的break和continue语句的用法

    简单了解Swift语言中的break和continue语句的用法

    这篇文章主要简单介绍了Swift语言中的break和continue语句的用法,与其他语言的一样用于循环语句流程控制,需要的朋友可以参考下
    2015-11-11
  • Swift心得笔记之函数

    Swift心得笔记之函数

    函数是执行特定任务的代码自包含块。通过给定一个函数名称标识它是什么,并在需要的时候使用该名称来调用函数以执行任务。今天我们就来探讨下swift中的函数问题。
    2015-04-04
  • Swift简单快速的动态更换app图标AppIcon方法示例

    Swift简单快速的动态更换app图标AppIcon方法示例

    这篇文章主要为大家介绍了Swift动态更换app图标AppIcon的简单快速方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Swift利用CoreData实现一个上班签到的小工具

    Swift利用CoreData实现一个上班签到的小工具

    这篇文章主要给大家介绍了关于Swift利用CoreData实现一个上班签到小工具的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • Swift 如何让ScrollView滚动到具体某个位置

    Swift 如何让ScrollView滚动到具体某个位置

    这篇文章主要介绍了Swift 如何让ScrollView滚动到具体某个位置,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Swift 列举内存管理与异常处理具体代码

    Swift 列举内存管理与异常处理具体代码

    内存管理和异常处理在任何编程语言中都是核心概念。尽管有很多教程解释了Swift自动引用计数的基本原理,但我发现没有一个可以从编译器的角度对其进行解释。在本文中,我们将通过详细代码列举学习Swift内存管理与异常处理
    2021-11-11
  • Swift开发应用中如何更方便地使用颜色详解

    Swift开发应用中如何更方便地使用颜色详解

    这篇文章主要给大家介绍了关于Swift开发应用中如何更方便地使用颜色的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03

最新评论