Javascript Caesar Cypher仅输出空字符串
我想在JS中创建一个凯撒密码。它应该取一个字符串和一个数字,将字符串中的每个字母在字母表中按提供的数字移动,然后返回密码字符串 我编写了一些代码,将每个字母更改为ASCII码,然后向其中添加输入数字,并将其转换回字符串。但是,当我运行代码时,得到的只是一个空字符串 我的代码如下。(是的,我知道它可以压缩,但我对JS还是相当陌生)Javascript Caesar Cypher仅输出空字符串,javascript,arrays,loops,Javascript,Arrays,Loops,我想在JS中创建一个凯撒密码。它应该取一个字符串和一个数字,将字符串中的每个字母在字母表中按提供的数字移动,然后返回密码字符串 我编写了一些代码,将每个字母更改为ASCII码,然后向其中添加输入数字,并将其转换回字符串。但是,当我运行代码时,得到的只是一个空字符串 我的代码如下。(是的,我知道它可以压缩,但我对JS还是相当陌生) const caesar=函数(字符串,num){ 让我们一起来解决这个问题吧; 让stringArray=Array.from(string); 设asciiArr
const caesar=函数(字符串,num){
让我们一起来解决这个问题吧;
让stringArray=Array.from(string);
设asciiArray=[];
for(设i=stringArray[0];i 如果(asciiNum>=65&&asciiNum=97&&asciiNum您的代码有很多错误
1) 您的拼写错误为charChodeAt
2) 您没有向数组中添加任何内容(您需要将元素推送到数组中)
3) 与之相反的是最终循环所需的
4) 您应该查看这两种方法的文档,因为您使用的charCodeAt
方式不正确
5) 你不需要那张地图
6) 您需要为join
指定分隔符
除此之外,一切都很好
const caesar=函数(字符串,num){
让我们一起来解决这个问题吧;
让stringArray=Array.from(string);
设asciiArray=[];
for(设i=0;i 如果(asciiNum>=65&&asciiNum=97&&asciiNum这个问题给了我们一个小挑战:caesar(“a”,1)
给了“b”
,caesar(“a”,5)
给了“f”
,那么caesar(“x”,5)
呢
当一个字母移到“z”
之外时,表示它应该绕到开头:ceaar(“x”,5)
将转到x->y->z->a->b->c
,最终结果是“c”
。我们要确保我们的程序对小写和大写字母都有这种行为
对于这类问题,与其编写一个大函数来完成所有工作,不如将其分解为更小的部分-
const toAscii=(char=”“)=>
char.charCodeAt(0)
常量fromscii=(n=0)=>
String.fromCharCode(n)
常量shiftAscii=(a=0,shift=0)=>
换挡手(a,换挡)| |换挡手(a,换挡)| | a
常数移位下限=(a=0,移位=0)=>
a>=65&&a
a>=97&&a
排列
.from(str,char=>fromscii(shiftAscii(toAscii,char,num)))
.join(“”)
log(caesarShift(“你好,世界!”,1))
//如果是,Xpsme!
log(caesarShift(“你好,世界!”,10))
//Rovvy,Gybvn!
你的意思是在这里推进ascii数组吗:asciiArray+=asciiNum;阅读调试代码的技巧。作为一名初学者,这是你要学习的最重要的技能之一。这不是一个合适的凯撒密码;Caesar(“javascript”,10)
产生“tk}m|sz~”
(其中,\uuu
是一个无法打印的字符)。预期结果是“tkfkcmbszd”
我知道,但我是根据OP所写的内容编写的。代码是一个“破碎”想法的产物;修复源代码,而不是副作用。这不是问题所要问的。