首页 > 解决方案 > 如何在不使用 reverse() 函数的情况下反转字符串,希望反转是逐字而不是从最后一个索引到 swift 中的第一个索引

问题描述

let word = "String to be reverse"

var reversed = ""
for char in word.characters {
    reversed.insert(char, at: reversed.startIndex)
}
print(reversed)

这将返回:“esrever eb ot gnirtS” 我想要做的就是这样“ngirtS ot eb esrever”

标签: iosswiftreverse

解决方案


您可以使用选项在范围内使用 enumerateSubstrings .byWords,获取所有子字符串范围并将它们替换为相同范围的子字符串反转:

let string = "String to be reverse"

var ranges: [Range<String.Index>] = []
string.enumerateSubstrings(in: string.startIndex..., options: .byWords) { _, range, _, _ in
    ranges.append(range)
}
var result = string
for range in ranges {
    var newWord = string[range]
    var reversed = ""
    while !newWord.isEmpty {
        reversed.append(newWord.removeLast())
    }
    result.replaceSubrange(range, with: reversed)
}
print(result) // "gnirtS ot eb esrever"

推荐阅读