我是 Matlab 的新手,在使用mod
函数时遇到问题。
我得到了一个小写字符的加扰向量和一个移位值,该值可以是正数或负数,我应该将其添加到
我应该使用 mod 函数包裹字母表中的小写字母的向量中。
例如,如果字母是"a
",如果轮班量是4,则字母将变为"e
"。
负数意味着在字母表中向"a
"移动。
移位应该围绕字母表"wrap
"x
移位7应该变成"e
"。
我尝试使用 if 和elseif
语句编写条件,但我应该使用mod
函数而不是条件。
>mod(x,y)
是x
和y
的余数,与y
具有相同的符号。因此,给定负x
,符号仍然是正的。这与在其他语言中定义mod
的方式不同。
我显然y
必须是 a-z 范围内的字符数。x
是移位字符的从 0 开始的索引,对于"a",它应该是 0,对于"z"应该是y-1
。您可以通过简单地减去 ASCII 值"a"来得到这一点:
letter - 'a'
请注意,'a'
是一个字符,它在算术运算中隐式转换为字母的 ASCII 值。
然后,mod
运算的结果再次返回一个这样的索引,您可以通过添加 ASCII 值"a"将其转换为字符:
char(index + 'a')
把所有的东西放在一起:
char(mod(letter-'a', 'z'-'a'+1) + 'a')
您可以在该表达式中使用字母向量(char 数组),而不是letter
。