欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

首先是用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ù)號(hào),如”-125″、”–+125″

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

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

但是實(shí)際情況并不那么簡(jiǎn)單,由于情況2和情況3的存在,上面直接用乘法和加法肯定不可行的,中間還得加上相應(yīng)的判斷。最佳的方式是我們直接遍歷字符串中的字符,先假設(shè)沒(méi)有正負(fù)號(hào)和非法字符的存在,當(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)它們?cè)谧址拈_(kāi)頭的時(shí)候才表示正負(fù),在字符串中間存在就是非法字符。我們可以通過(guò)ASCII編碼判斷”+”和”-“(對(duì)應(yīng)的值分別為43和45),設(shè)個(gè)變量s表示多個(gè)”+”和”-“累積之后的正負(fù)。最后結(jié)果為intStr = s * intStr。當(dāng)遍歷字符串過(guò)程中發(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ù)號(hào)
 let tempStrInt = characterInt.hashValue - "0".unicodeScalars.first!.hashValue
 guard (tempStrInt <= 9 && tempStrInt >= 0) || (characterInt.hashValue == 43 || characterInt.hashValue == 45) else {
  
  print("包含非法字符!");
  return 0;
  
 }
 
 //正負(fù)號(hào)只能存在于字符串開(kāi)頭
 if characterInt.hashValue == 43 || characterInt.hashValue == 45 {
  guard strInt == nil else {
  print("正負(fù)號(hào)只能存在于字符串開(kāi)頭!");
  return 0;
  }
 }
 
 //既然走到這一步,說(shuō)明字符串合法
 //判斷正負(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ù)值過(guò)大導(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ù)號(hào)只能存在于字符串開(kāi)頭!”

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

總結(jié)

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

相關(guān)文章

  • Swift中定義單例的方法實(shí)例

    Swift中定義單例的方法實(shí)例

    Swift中單例的寫(xiě)法有很多種,下面這篇文章主要給大家介紹了關(guān)于Swift中定義單例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Swift可選值優(yōu)化示例詳解

    Swift可選值優(yōu)化示例詳解

    這篇文章主要為大家介紹了Swift可選值優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 零基礎(chǔ)上手Swift快速入門教程概覽

    零基礎(chǔ)上手Swift快速入門教程概覽

    這篇文章主要介紹了零基礎(chǔ)上手Swift快速入門教程概覽,Swift是由蘋(píng)果開(kāi)發(fā)的新編程語(yǔ)言并且即將開(kāi)源,需要的朋友可以參考下
    2015-11-11
  • Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法示例

    Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法示例

    Swift語(yǔ)言中沒(méi)有內(nèi)設(shè)的棧和隊(duì)列,很多擴(kuò)展庫(kù)中使用Generic Type來(lái)實(shí)現(xiàn)?;蚴顷?duì)列。下面這篇文章就來(lái)給大家詳細(xì)介紹了Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。
    2017-03-03
  • Swift?Error重構(gòu)優(yōu)化詳解

    Swift?Error重構(gòu)優(yōu)化詳解

    這篇文章主要為大家介紹了Swift?Error的問(wèn)題解決及重構(gòu)優(yōu)化方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景

    swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景

    這篇文章主要為大家介紹了swift語(yǔ)言AutoreleasePool原理及使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 詳解Swift中enum枚舉類型的用法

    詳解Swift中enum枚舉類型的用法

    Swift中通過(guò)enum關(guān)鍵字可以直接創(chuàng)建出枚舉對(duì)象,而且可以使用switch和case語(yǔ)句來(lái)進(jìn)行流程控制,十分強(qiáng)大和靈活,這里我們就來(lái)詳解Swift中enum枚舉類型的用法
    2016-06-06
  • 在Swift中使用Cocoa的現(xiàn)有設(shè)計(jì)模式介紹

    在Swift中使用Cocoa的現(xiàn)有設(shè)計(jì)模式介紹

    這篇文章主要介紹了在Swift中使用Cocoa的現(xiàn)有設(shè)計(jì)模式介紹,Cocoa是蘋(píng)果公司為Mac OS X所創(chuàng)建的原生面向?qū)ο蟮腁PI,是Mac OS X上五大API之一,需要的朋友可以參考下
    2014-07-07
  • SwiftUI學(xué)習(xí)之state和Binding的區(qū)別淺析

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

    這篇文章主要給大家介紹了關(guān)于SwiftUI學(xué)習(xí)之state和Binding區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 舉例講解Swift編程中switch...case語(yǔ)句的用法

    舉例講解Swift編程中switch...case語(yǔ)句的用法

    這篇文章主要介紹了Swift編程中switch...case語(yǔ)句的用法,其中fallthrough關(guān)鍵字在switch語(yǔ)句中的使用是重點(diǎn),需要的朋友可以參考下
    2016-04-04

最新評(píng)論