我可以将排列的位置值与空白进行比较吗?Javascript



这是我的问题。我正在制作一个小的加密器,所以首先,我必须在每个字符的数组中保留一个字符串,包括空格,以便用后面的字母替换每个原始字母,但我必须尊重每个单词返回新字符串之间的空格。 因此,当我处于值得一个空白的安排位置时,我将其与该空格进行比较,这仅在我有两个单词 ex.(嘿你(时才有效,但如果我有两个以上的 ex(嘿,你等等(,程序不会给我任何结果。 哪个应该是,加密的:(ifz zpv xbju(。

这是我代码的一部分:

const mensaje = {
mensajeLimpio : '', 
encriptado : '',
desencriptado : '',
};
//Arreglo para recorrer el abecedario con respecto al string dado
var arregloAbecedario = ['a','b','c','d','e','f','g','h','i','j','k','l','m','ñ','o',
'p','q','r','s','t','u','v','w','x','y','z']; 
function encriptar(){
var arregloCaracteres = [];
var cadena = '';
var input = document.getElementById('input').value;
//Quitamos caracteres especiales como (?!#)
input = input.replace(/[^a-zA-Z ]/g, "");
//Quitamos acentos 
input = input.normalize("NFD").replace(/[u0300-u036f]/g, "");
//Se guarda el mensaje limpio, sin caracteres especiales, solo caracteres.
mensaje.mensajeLimpio = input;
arregloCaracteres = input.toLowerCase().split("");
for( var i=0; i<arregloCaracteres.length ;i++){
var r = 0;
//Validamos espacios en blanco
if (arregloCaracteres[i] === " "){
cadena = cadena + " ";
}
else{
//Validamos posición actual con respecto a la del arreglo del abecedario, recorremos
while(arregloCaracteres[i]!==arregloAbecedario[r]){
r++;
}
//Hasta que es igual, guardamos la posicion actual y sumamos uno a su posición en el abecedario
if(arregloCaracteres[i] === 'z'){
cadena = cadena + arregloAbecedario[0];
}
else{
cadena = cadena + arregloAbecedario[r+1]; 
}
}
}
mensaje.encriptado = cadena;
console.log("Mensaje original: "+mensaje.mensajeLimpio);
console.log("encriptado: "+mensaje.encriptado);
}

此循环有永久运行的风险:

while(arregloCaracteres[i]!==arregloAbecedario[r]){
r++;
}

例如,当您的输入具有纯字母"n"时,就会发生这种情况,这在arregloAbecedario中不会出现。

请改用indexOf,如果未找到索引,则向结果添加一个空格:

var r = arregloAbecedario[r].indexOf(arregloCaracteres[i]);
if (r >= 0) {
if(arregloCaracteres[i] === 'z'){
cadena = cadena + arregloAbecedario[0];
}
else{
cadena = cadena + arregloAbecedario[r+1]; 
}
} else {
cadena = cadena + " ";
}

请注意,不应使代码依赖于"z"是列表中的最后一个字符。而是使用模逻辑:

var r = arregloAbecedario[r].indexOf(arregloCaracteres[i]);
if (r >= 0) {
cadena = cadena + arregloAbecedario[(r+1) % arregloCaracteres.length];
} else {
cadena = cadena + " ";
}

将你的 for 循环更改为这个

for( var i=0; i<arregloCaracteres.length ;i++){
//Validamos espacios en blanco
var r=0;

if (arregloCaracteres[i] === " "){
cadena = cadena + " ";
}
else{
while(arregloCaracteres[i]!==arregloAbecedario[r]){
r++;
}
if(arregloCaracteres[i] === 'z'){
cadena = cadena + arregloAbecedario[0];
}
else{
cadena = cadena + arregloAbecedario[r+1]; 
}
}
}

您正在做的是您在不检查" '的情况下增加'r',您需要首先检查您是否在当前索引中拥有 '',如果没有,则只递增'r'

工作示例

var arregloAbecedario = ['a','b','c','d','e','f','g','h','i','j','k','l','m','ñ','o',
'p','q','r','s','t','u','v','w','x','y','z']; 

var arregloCaracteres = 'hey you wait';
var cadena = '';
for( var i=0; i<arregloCaracteres.length ;i++){
//Validamos espacios en blanco
var r=0;
if (arregloCaracteres[i] === " "){
cadena = cadena + " ";
}
else{
while(arregloCaracteres[i]!==arregloAbecedario[r]){
r++;
}
if(arregloCaracteres[i] === 'z'){
cadena = cadena + arregloAbecedario[0];
}
else{
cadena = cadena + arregloAbecedario[r+1]; 
}
}
}

console.log(cadena)

最新更新