加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – 如何在Swift中实现ROT13功能?

发布时间:2020-12-14 17:17:12 所属栏目:百科 来源:网络整理
导读:我想创建一个接收String并返回一个String的函数,并在字母表中用字母后面的字母替换一个字母13个字母(ROT13).我发现了很多例子,遗憾的是由于各种错误,我无法让它工作.例如这一个: var key = [String:String]() // EDITEDlet uppercase = Array(arrayLiteral:
我想创建一个接收String并返回一个String的函数,并在字母表中用字母后面的字母替换一个字母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 }))
}

解决方法

实际上你最初的角色映射方法很好:

var key = [Character: Character]()

但是这两个数组必须是字符数组:

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 })
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读