2015-10-04 58 views
-2

我正在學習使用資源在swift中編寫代碼,在那裏我看到了這個函數可以反轉參數中給出的字符。 下面是代碼:這個功能是如何工作的?

func reverseIt(s: String) -> String { 
    var rst = "" 
    for char in s.characters { 
     rst = "\(char)" + rst 
    } 
    return rst 
} 

我只是想知道它是如何設法扭轉這種局面,因爲我不SE具體的事情在這裏它這是否

+2

您將從空字符串開始,將字符串中的每個字符添加到空字符串的前面。你寫了它,你不明白什麼? – JAL

+0

在for循環中打印出第一個,然後你會看到。 – usr1234567

+0

我沒有寫,我只是在某處看到它,然後在這裏輸入。 –

回答

2

步驟通過它使用「你好」作爲一個例子你的想法:

第一次,rst是空的,併成爲"H" + rst"H"(因爲rst爲空)。

下一次,第2個字符"e"被拍攝,並rst成爲"e" + rst這是"e" + "H""eH"。你可以看到這是怎麼回事。

+0

Oooohhh ...我現在明白了!非常感謝你的朋友。非常常識的東西,但仍然非常感謝你! –

+0

非常歡迎。是的,常識是你正在尋找的答案;-)應該幫助你爲自己回答很多問題!順便說一句,現在你明白了,其他答案也應該對你有意義。 – Kenney

+0

是的,他們當然可以!再次感謝隊友! –

0

的功能是很容易跟隨,看到這條線rst = "\(char)" + rst

最初是一個空字符串,然後在for語句的每次迭代中,每個字符(在for中獲得的變量,然後使用字符串插值)被附加到字符串的開頭。

我希望這對你有所幫助。

+0

但爲什麼不按正確的順序。例如,爲什麼它不以正確的順序打印「你好」,而是從最後開始? –

+0

@ YousufEjazi007如果您想了一會兒,使用堆棧數據結構,從字符串末尾迭代,從頭開始迭代等等,有幾種方法可以反轉字符串。當然,每種方法都有成本(在內存中講話和效率)。在你的問題中使用的方式只是其中的一種,僅此而已。 –

+0

是的,我確實在互聯網上檢查過,甚至有一個關於如何反轉給定字符串的整個百科全書頁面。但我仍然不太明白。你可以再試一次,讓我對它更簡單一點嗎?我將不勝感激。 –

0

它反轉字符串的原因是由於代碼在賦值(=)運算符右側的順序。如果代碼是這樣的:

rst = rst + "\(char)" 

那麼結果將不會顛倒。如果這不能幫助你清理它,那就讓我們一步一步來。使用代碼:

rst = "\(char)" + rst 

的每個通的for-in循環,值會像這樣:

first pass - rst would get char ("h") + rst ("")  -> "h" 
second pass - rst would get char ("e") + rst ("h") -> "eh" 
third pass - rst would get char ("l") + rst ("eh") -> "leh" 
fourth pass - rst would get char ("l") + rst ("leh") -> "lleh" 
fifth pass - rst would get char ("o") + rst ("lehh") -> "olleh" 

這是否讓它在你的心中,現在清楚了嗎?