久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Swift算法實現字符串轉數字的方法示例

最近學完了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算法實現字符串轉數字的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對html5模板網的支持。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要給大家介紹了關于RxSwift學習教程之類型對象Subject的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于RxSwift學習教程之Observable的相關資料,文中詳細的給大家介紹了關于新建Observable、訂閱Observable和取消訂閱并消除內存泄漏等相關的內容,需要的朋友可以
RxSwift是Swift函數響應式編程的一個開源庫,由Github的ReactiveX組織開發,維護。下面這篇文章主要給大家介紹了關于RxSwift學習之基礎篇的相關資料,文中通過示例代碼介紹的非常詳細,需
這篇文章主要為大家詳細介紹了Swift4.0 Array數組的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
CATransition動畫主要在過渡時使用,比如兩個頁面層級改變的時候添加一個轉場效果。CATransition分為兩類,一類是公開的動畫效果,一類是非公開的動畫效果。這篇文章主要給大家介紹了
近日,iPhone X的發布在人們群眾引起了很大的轟動,下面這篇文章主要給大家介紹了關于利用Swift如何判斷iPhone X機型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面
主站蜘蛛池模板: 欧洲色| 国产高清视频在线 | 一区二区三区四区免费在线观看 | 99福利 | 国产成人精品一区二 | 一区二区免费高清视频 | 精品香蕉一区二区三区 | 成人在线激情 | av成人在线观看 | 日韩高清国产一区在线 | 国产免费又色又爽又黄在线观看 | 91精品久久久久久久久久 | 日韩久久久久久久 | 国产精品网页 | 看片91| 日韩中文字幕一区 | av第一页 | 日日摸日日碰夜夜爽2015电影 | 青青草社区 | 一级黄色毛片 | 亚洲精品一二三区 | 国产精品免费观看视频 | 国产精品久久久久久久免费大片 | 久操伊人| 欧美日韩精品一区 | 精品福利一区二区三区 | 久久久精品高清 | 99久久日韩精品免费热麻豆美女 | 国产精品精品视频一区二区三区 | 美女天天操 | 精品1区| jdav视频在线观看免费 | 国产日韩欧美一区 | 久久久综合精品 | av中文字幕在线 | www.欧美 | 欧美成人精品欧美一级 | 欧美精品一区二区三区在线 | 日韩一二三 | 福利片在线观看 | 国产偷录叫床高潮录音 |