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

2022-09-20 21:39:14 字數 1529 閱讀 4131

前言

最近學完swift之後一直沒有機會實戰,發現由於swift發展歷史原因,目前網上大部分的演算法都是使用c、j**a或其他語言實現的,幾乎沒有使用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

var s = 1

var strint:int? = nil

for characterint in str.unicodescalars

//正負號只能存在於字串開頭

if characterint.hashvalue == 43 || characterint.hashvalue == 45 }

//既然走到這一步,說明字串合法

//判斷正負數

if characterint.hashvalue == 43 || characterint.hashvalue == 45elseelse }

}var result:int? = 0

if strint != nil

return result!;

}在上述實現的演算法中:

輸入」125″,輸出125

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

輸入」1-25″,提示」正負號只能存在於字串開頭!」

輸入」1m25″,提示」包含非法字元」

總結本文標題: swift演算法實現字串轉數字的方法示例

本文位址:

字串 字串轉數字

題目 將乙個字串轉換成數字。例如 123 123,71.02 71.02.方法一,直接呼叫庫函式atoi const char 和atof const char stoi string str include include int main 輸出結果 num int 435 num double ...

字串轉數字

注意進製,注意小數,負數,指數。小數跟指數比較繁瑣。應該對字串做限制,字串只是整數字串。否則,以下幾種情況都是會報錯 1.0x011.011,0b011.011都是錯誤的。2.0100.011實際上是十進位制的100.01。3.指數表示造成邏輯更多了。鑑於以上幾個情況考慮,為簡化,整數字串轉數字。草...

字串轉數字

看了劍指offer上面的第一道題,字串轉數字,就去查了下,有多種方法。比如可以直接用函式atoi 下面是我的 include include include include includeusing namespace std int main string a 100 int num 0 if a...