反转字符串, 以单词反转句子

// 给一个字符串,将其按照单词顺序进行反转。比如说 "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!)

猜你喜欢

转载自www.cnblogs.com/ZeroHour/p/10109618.html