我想创建一个函数,它接收一个字符串并返回一个字符串,并用字母表中的 13 个字母(ROT13)替换一个字母。我找到了很多例子,不幸的是,由于各种错误,我无法让它发挥作用。例如这个:
var key = [String:String]() // EDITED
let uppercase = Array(arrayLiteral: "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
let lowercase = Array(arrayLiteral: "abcdefghijklmnopqrstuvwxyz")
for i in 0 ..< 26 {
key[uppercase[i]] = uppercase[(i + 13) % 26]
key[lowercase[i]] = lowercase[(i + 13) % 26]
}
func rot13(s: String) -> String {
return String(map(s, { key[$0] ?? $0 }))
}
最佳答案
实际上,您最初映射 Character
的方法很好:
var key = [Character: Character]()
但是这两个数组必须是
Characters
的数组:let uppercase = Array("ABCDEFGHIJKLMNOPQRSTUVWXYZ".characters)
let lowercase = Array("abcdefghijklmnopqrstuvwxyz".characters)
(备注:您(几乎)永远不想调用
xxxLiteral:
初始值设定项明确地。这样做(几乎)总是隐藏实际问题。)
现在您填充字典的代码有效:
for i in 0 ..< 26 {
key[uppercase[i]] = uppercase[(i + 13) % 26]
key[lowercase[i]] = lowercase[(i + 13) % 26]
}
并且可以将字符串转换为
// map
// String --> Characters ---> Characters -> String
func rot13(s: String) -> String {
return String(s.characters.map { key[$0] ?? $0 })
}
关于xcode - 如何在 Swift 中实现 ROT13 函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37756430/