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

ruby – 在字符串中旋转字母,以便每个字母被n个位置移动到另一个

发布时间:2020-12-17 04:02:22 所属栏目:百科 来源:网络整理
导读:我的任务是想出一种编码字符串的方法.除其他外,我需要将每个字母移动一个给定的数字,但转换后的字母必须是一个字母(循环移位). 到目前为止我有以下代码: def play_pass(str,n) letters = ('a'..'z').to_a str.chars.map {|x| letters.include?(x.downcase)
我的任务是想出一种编码字符串的方法.除其他外,我需要将每个字母移动一个给定的数字,但转换后的字母必须是一个字母(循环移位).

到目前为止我有以下代码:

def play_pass(str,n)
  letters = ('a'..'z').to_a
  str.chars.map {|x| letters.include?(x.downcase) ? (x.ord + n).chr : x}.join
end

这适用于大多数字母

我的问题是,如果我试图将y移动2个位置,我应该得到一个但是我得到了这个角色[

我哪里错了?

解决方法

试试这个:

def play_pass(str,n)
  letters = ('a'..'z').to_a
  str.chars.map {|x| letters.include?(x.downcase) ? 
     letters[letters.find_index(x.down_case) + n - letters.size] : x}.join
end

p play_pass("abcdefghijklmnopqrstuvwxyz",2)

产量

"cdefghijklmnopqrstuvwxyzab"
[Finished in 0.3s]

这个怎么运作

letters是一个字符a到z的数组,就像OP在代码中的方式一样.
我们迭代str中的所有字符,并在字母数组中找到它的索引.然后我们将n添加到该索引以获取移位的字符.为了避免从数组中掉落,我们减去letters.size(在本例中为26),这样我们使用0到25之间的值来完成对字母的查找.

例如:在OP指出的场景中,如果要移位的字符是y,那么在字母中添加2的索引将给我们移位索引26(24是字母数组中y的索引,2是数字字符我们在测试用例中移位) – 为了使字母表现得像圆形数组,并且不遇到索引超出绑定类型的异常,我们从26移位索引中减去letters.size.因此,我们得到索引0,它代表char a,这是我们感兴趣的.

另一个例子是a的情况 – 这里移位的索引将是0 2 = 2.当我们从中减去letters.size时,我们得到-24. Ruby允许负数索引,其中数组元素的查找是从反向完成的,它将解析为纠正元素.索引-1与索引(大小-1)相同,类似地,-size的索引值等于索引0.

(编辑:李大同)

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

    推荐文章
      热点阅读