2017-01-02 38 views
1

我是新來的斯威夫特和我花了1h的調試,但我仍然不知道爲什麼它沒有一個字符。我如何修復致命錯誤:無法形成從空字符串

這是本文給出了一個問題:扭轉一個字符串:

輸入: 「你好」

輸出: 「2009東海生日賀」

而且有我的代碼:

import Foundation 
class Solution { 
    func reverseString(_ s: String) -> String { 
     // initialize a new null string 
     var answer = "" 
     // get the length of the input string 
     var lengthOfString = s.characters.count 
     // add the character into the new string 
     for nums in 0...(lengthOfString-1){ 
      var index = s.index(s.startIndex, offsetBy: lengthOfString) 
      answer.append(s[index]) 
      lengthOfString-=1 
     } 
     return answer 
    } 
} 

let a = Solution() 
let b = a.reverseString("hello") 
print(b) 

這裏是我的錯誤的畫面:

+0

解決了,謝謝你,我只是忽略了輸入字符串 – user7341005

回答

2

的問題是在此塊:

for nums in 0...(lengthOfString-1){ 
    var index = s.index(s.startIndex, offsetBy: lengthOfString) 
    answer.append(s[index]) 
    lengthOfString-=1 
} 
  1. 應該使用0..<lengthOfString的範圍。
  2. 你改變lengthOfString的值,它是一個非常糟糕的方式。

下面是一個示例扭轉你想要做的字符串:

extension String { 

    subscript (i: Int) -> Character { 
     return self[characters.index(startIndex, offsetBy: i)] 
    } 

    subscript (i: Int) -> String { 
     return String(self[i] as Character) 
    } 

    func reverse() -> String { 

     let count = characters.count 
     if count == 0 { return "" } 

     var result = "" 
     for i in 0..<count { 
      result = self[i] + result 
     } 

     return result 

    } 

} 

let s = "hello" 
s.reverse() // print: olleh 
+0

號的長度,它是偏移越過邊界問題,但還是感謝你回答 – user7341005

+0

你的建議是正確的,我會用.. <後來在我的代碼 – user7341005

+0

檢查更新的答案,我加了一個示例代碼爲您服務。 – bubuxu

相關問題