最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift算法實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字的方法示例

 更新時(shí)間:2017年03月21日 11:31:17   作者:李峰峰博客  
最近學(xué)完了swift想著實(shí)踐下,就通過一些簡單的算法進(jìn)行學(xué)習(xí)研究,下面這篇文章主要介紹了Swift算法實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字的方法,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

最近學(xué)完Swift之后一直沒有機(jī)會實(shí)戰(zhàn),發(fā)現(xiàn)由于Swift發(fā)展歷史原因,目前網(wǎng)上大部分的算法都是使用C、Java或其他語言實(shí)現(xiàn)的,幾乎沒有使用Swift實(shí)現(xiàn)的,所以自己打算使用Swift去實(shí)現(xiàn)一些主流的算法,既是對自己Swift的回顧,也是對自己算法方面的提高。

首先是用Swift實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字,當(dāng)然,肯定是不能使用Swift自帶的字符串轉(zhuǎn)數(shù)字的api。

題目:

使用Swift實(shí)現(xiàn)一個(gè)方法,輸入字符串,輸出該字符串轉(zhuǎn)換成的數(shù)字。

例如,輸入字符串“125”,輸出數(shù)字125

實(shí)現(xiàn)思路及代碼

首先先考慮可能輸入情況,包括非法輸入:

     情況1:所有字符均可直接轉(zhuǎn)換成數(shù)字,如”125″

     情況2:包含一個(gè)或多個(gè)正負(fù)號,如”-125″、”–+125″

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

如果是情況1,處理起來將會非常簡單:首先利用ASCII編碼將字符串“125”的每個(gè)字符轉(zhuǎn)換為數(shù)字,之后轉(zhuǎn)換成數(shù)字后直接用乘法和加法即可:1*100+2*10+3=123。

但是實(shí)際情況并不那么簡單,由于情況2和情況3的存在,上面直接用乘法和加法肯定不可行的,中間還得加上相應(yīng)的判斷。最佳的方式是我們直接遍歷字符串中的字符,先假設(shè)沒有正負(fù)號和非法字符的存在,當(dāng)遍歷到第一個(gè)字符”1″的時(shí)候,intStr=1,當(dāng)遍歷到第二個(gè)字符”2″的時(shí)候,intStr = intStr*10+2=12,當(dāng)遍歷到最后一個(gè)字符”3″的時(shí)候,intStr = intStr*10+3=123。

關(guān)于”+”和”-“,只有當(dāng)它們在字符串的開頭的時(shí)候才表示正負(fù),在字符串中間存在就是非法字符。我們可以通過ASCII編碼判斷”+”和”-“(對應(yīng)的值分別為43和45),設(shè)個(gè)變量s表示多個(gè)”+”和”-“累積之后的正負(fù)。最后結(jié)果為intStr = s * intStr。當(dāng)遍歷字符串過程中發(fā)現(xiàn)了非法字符,則終止后續(xù)遍歷,并給出提示。

實(shí)現(xiàn)代碼:

//字符串轉(zhuǎn)數(shù)字
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 {
 
 //只能包含數(shù)字或正負(fù)號
 let tempStrInt = characterInt.hashValue - "0".unicodeScalars.first!.hashValue
 guard (tempStrInt <= 9 && tempStrInt >= 0) || (characterInt.hashValue == 43 || characterInt.hashValue == 45) else {
  
  print("包含非法字符!");
  return 0;
  
 }
 
 //正負(fù)號只能存在于字符串開頭
 if characterInt.hashValue == 43 || characterInt.hashValue == 45 {
  guard strInt == nil else {
  print("正負(fù)號只能存在于字符串開頭!");
  return 0;
  }
 }
 
 //既然走到這一步,說明字符串合法
 //判斷正負(fù)數(shù)
 if characterInt.hashValue == 43 || characterInt.hashValue == 45{
  s = s * ( 44 - characterInt.hashValue )
 }else{
  
  if strInt == nil {
  strInt = characterInt.hashValue - "0".unicodeScalars.first!.hashValue
  }else{
  //使用溢出運(yùn)算符&*和&+避免數(shù)值過大導(dǎo)致溢出崩潰
  strInt = strInt! &* 10 &+ ( characterInt.hashValue - "0".unicodeScalars.first!.hashValue ) 
  }
 
 }
 
 }
 
 var result:Int? = 0
 if strInt != nil {
 result = s * strInt!
 }
 
 return result!;
}

在上述實(shí)現(xiàn)的算法中:

      輸入”125″,輸出125

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

      輸入”1-25″,提示”正負(fù)號只能存在于字符串開頭!”

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

總結(jié)

以上就是關(guān)于Swift算法實(shí)現(xiàn)字符串轉(zhuǎn)數(shù)字的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 超全面的Swift編碼規(guī)范(推薦)

    超全面的Swift編碼規(guī)范(推薦)

    這篇文章主要給大家介紹了關(guān)于Swift編碼規(guī)范的相關(guān)資料,文中介紹的非常詳細(xì),對大家開發(fā)swift具有一定的參考價(jià)值,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-03-03
  • SwiftUI學(xué)習(xí)之state和Binding的區(qū)別淺析

    SwiftUI學(xué)習(xí)之state和Binding的區(qū)別淺析

    這篇文章主要給大家介紹了關(guān)于SwiftUI學(xué)習(xí)之state和Binding區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 關(guān)于Swift 4.1中的Codable改進(jìn)詳解

    關(guān)于Swift 4.1中的Codable改進(jìn)詳解

    這篇文章主要給大家介紹了關(guān)于Swift 4.1中的Codable改進(jìn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • 簡單了解Swift語言中的break和continue語句的用法

    簡單了解Swift語言中的break和continue語句的用法

    這篇文章主要簡單介紹了Swift語言中的break和continue語句的用法,與其他語言的一樣用于循環(huán)語句流程控制,需要的朋友可以參考下
    2015-11-11
  • Swift心得筆記之函數(shù)

    Swift心得筆記之函數(shù)

    函數(shù)是執(zhí)行特定任務(wù)的代碼自包含塊。通過給定一個(gè)函數(shù)名稱標(biāo)識它是什么,并在需要的時(shí)候使用該名稱來調(diào)用函數(shù)以執(zhí)行任務(wù)。今天我們就來探討下swift中的函數(shù)問題。
    2015-04-04
  • Swift簡單快速的動態(tài)更換app圖標(biāo)AppIcon方法示例

    Swift簡單快速的動態(tài)更換app圖標(biāo)AppIcon方法示例

    這篇文章主要為大家介紹了Swift動態(tài)更換app圖標(biāo)AppIcon的簡單快速方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift利用CoreData實(shí)現(xiàn)一個(gè)上班簽到的小工具

    Swift利用CoreData實(shí)現(xiàn)一個(gè)上班簽到的小工具

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData實(shí)現(xiàn)一個(gè)上班簽到小工具的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift 如何讓ScrollView滾動到具體某個(gè)位置

    Swift 如何讓ScrollView滾動到具體某個(gè)位置

    這篇文章主要介紹了Swift 如何讓ScrollView滾動到具體某個(gè)位置,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Swift?列舉內(nèi)存管理與異常處理具體代碼

    Swift?列舉內(nèi)存管理與異常處理具體代碼

    內(nèi)存管理和異常處理在任何編程語言中都是核心概念。盡管有很多教程解釋了Swift自動引用計(jì)數(shù)的基本原理,但我發(fā)現(xiàn)沒有一個(gè)可以從編譯器的角度對其進(jìn)行解釋。在本文中,我們將通過詳細(xì)代碼列舉學(xué)習(xí)Swift內(nèi)存管理與異常處理
    2021-11-11
  • Swift開發(fā)應(yīng)用中如何更方便地使用顏色詳解

    Swift開發(fā)應(yīng)用中如何更方便地使用顏色詳解

    這篇文章主要給大家介紹了關(guān)于Swift開發(fā)應(yīng)用中如何更方便地使用顏色的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評論

黑龙江省| 万州区| 韶山市| 德兴市| 东乌| 温州市| 新邵县| 明光市| 荔浦县| 上饶县| 英吉沙县| 二连浩特市| 崇文区| 布尔津县| 台山市| 新乐市| 鲁甸县| 香港 | 惠水县| 临沭县| 那曲县| 轮台县| 仙游县| 仪陇县| 普安县| 河曲县| 峡江县| 绵阳市| 革吉县| 烟台市| 樟树市| 大同市| 阳原县| 玉林市| 股票| 巍山| 盈江县| 鞍山市| 南川市| 嘉义市| 日照市|