首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过键值递增ascii顺序

如何通过键值递增ascii顺序
EN

Stack Overflow用户
提问于 2020-01-23 05:37:01
回答 1查看 35关注 0票数 1

我想通过按键值递增ASCII来加密字符串。但是对于这个代码,我遇到了一个问题。

代码语言:javascript
复制
def caesar_cipher(str, key)
    new_sentence = []
    str.split("").each do |letter|
        ascii = letter.ord
        puts ascii

        ascii += key if ascii >= 65 && ascii <= 90
        if ascii > 90
            return_start = ascii - 90
            ascii = 64 + return_start
        end

        ascii += key if ascii >= 97 && ascii <= 122
        if ascii > 122
            return_start = ascii - 122
            ascii = 96 + return_start
        end
        puts ascii


        new_sentence << ascii.chr

    end

    puts new_sentence
end

caesar_cipher("Wh", 5)

我放了一些puts来看看会发生什么,当我puts ascii的时候,我发现不要给我返回好的数字。对于'W‘,一切都很好。他从87开始,然后转到66。但我不明白为什么“h”会有问题。他从104开始,然后转到78。他为什么不去109

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 07:24:25

简短的回答是:因为你让它这么做。

代码语言:javascript
复制
if ascii > 90               # "h".ord == 104 so this is true
  return_start = ascii - 90 # return_start is now 14
  ascii = 64 + return_start # ascii is now 64 + 14 (78)
                            # Note this is  a elaborate way of subtracting 26 from ascii
end

在这样编写代码时,尝试使用p打印中间值和结果:

代码语言:javascript
复制
if ascii > 90
  p  return_start = ascii - 90
  p  ascii = 64 + return_start
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59868619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档