麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:45:47
字體:
供稿:網(wǎng)友

前言

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

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

題目:

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

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

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

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

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

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

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

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

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

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

實現(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{  //使用溢出運算符&*和&+避免數(shù)值過大導(dǎo)致溢出崩潰  strInt = strInt! &* 10 &+ ( characterInt.hashValue - "0".unicodeScalars.first!.hashValue )   }  }  }  var result:Int? = 0 if strInt != nil { result = s * strInt! }  return result!;}

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

      輸入”125″,輸出125

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

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

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

總結(jié)

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


注:相關(guān)教程知識閱讀請移步到swift教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 99麻豆久久久国产精品免费 | 毛片在线播放视频 | 国产精品视频一区二区三区四区五区 | 激情综合网俺也去 | av电影院在线观看 | 久久国产中文字幕 | 久久国产28 | 黄色毛片视频在线观看 | 精品国内视频 | 国产无限资源在线观看 | 日韩视频1 | 午夜精品老牛av一区二区三区 | 精品国产91久久久久 | 久久影院免费观看 | 国产精品久久久久久久亚洲按摩 | 久久久久久久久久亚洲 | 性欧美极品xxxx欧美一区二区 | 国产成人精品一区二区视频免费 | 美女污污视频在线观看 | 免费黄色入口 | 人人舔人人舔 | 国内精品国产三级国产a久久 | 草莓视频在线导航 | 日韩视频在线观看免费 | 亚洲精品欧美二区三区中文字幕 | 成人免费自拍视频 | 中文字幕亚洲欧美 | 精品亚洲福利一区二区 | 韩国一大片a毛片 | 在线成人免费av | 久久最新视频 | 爽爽视频免费看 | 成人国产精品一区 | 免费a级毛片大学生免费观看 | 欧美四级在线观看 | xxx日本视频| 91在线视频网址 | 国内成人自拍视频 | 亚洲aⅴ在线观看 | 精品一区二区在线视频 | 美女黄视频在线观看 |