// 给一个字符串,将其按照单词顺序进行反转。比如说 "the sky is blue", 那么反转就是 "blue is sky the"。 // 反转字符串 fileprivate func reverse<T> (_ chars: inout [T], _ start: Int, _ end: Int) { // 首下标, 末下标 var start = start, end = end while start < end { // 交换两个下标之间的数据 (chars[start], chars[end]) = (chars[end], chars[start]) // 下标向中间移动 start += 1 end -= 1 } } // 反转句子, 以单词反转 func reverseWords(s:String?) -> String? { // 如果字符串不存在则返回 guard let s = s else { return nil } // 将字符串转换为字符数组 var chars = Array(s), start = 0 // 反转字符数组 reverse(&chars, 0, chars.count - 1); // 遍历字符数组 for i in 0 ..< chars.count { // 如果下标i走到空格, 直到末尾 if i == chars.count - 1 || chars[i+1] == " " { // 反转从start到i这段数组当中的字符 reverse(&chars, start, i) // start后移, 跳过空格 start = i + 2 } } // 返回反转后的字符串 return String(chars) } // 反转前 let str = "the sky is blue" // 打印 print("反转前: " + str) // 反转后 let reverseStr:String? = reverseWords(s: str) // 打印 print("反转后: " + reverseStr!)