Esta es mi primera publicación, así que espero estar haciendo esto correctamente.
Estoy tomando una clase de codificación y se nos pidió que hiciéramos un fragmento de código que solicitará la entrada de una frase y devolverá en la consola esa frase con las letras mayúsculas movidas al frente, pero aún en el mismo orden. Luego imprima en la consola esta frase reordenada. (No se nos permite usar matrices) Por ejemplo: Ingresar "HeLLoTherE" devolvería "HLLTEeoher"
Sin embargo, el problema es que tengo problemas para entender cómo escribir este código. ¿Cómo puedo hacer que el código seleccione estas letras mayúsculas y las mueva al frente? usando .toUpperCase()? ¿Cómo puedo hacer que seleccione la letra y la mueva delante del resto? Si alguien pudiera mostrarme un ejemplo de cómo se hace esto y explicarlo un poco, se lo agradecería mucho :)
Puede comenzar con el algoritmo más sencillo para que algo funcione.
let value = "HeLLoTherE"; let result = ""; for (let char of value) { if (char >= "A" && char <= "Z") { result += char; } } for (let char of value) { if (char >= "a" && char <= "z") { result += char; } } console.log(result);Luego podría consolidar los 2 bucles combinando las condiciones.
let value = "HeLLoTherE"; let upper = ""; let lower = ""; for (let char of value) { if (char >= "A" && char <= "Z") { upper += char; } else if (char >= "a" && char <= "z") { lower += char; } } console.log(upper + lower);Otra forma de resolver esto sería usar expresiones regulares.
var value = "HeLLoTherE"; var upper = value.replace(/[^AZ]*/g, ""); var lower = value.replace(/[^az]*/g, ""); console.log(upper + lower);Bueno, no puede usar matrices, lo que lo hace un poco difícil, sin embargo, aún puede hacer algo.
Aunque estoy usando un ciclo for, en realidad no estoy usando arreglos. Dado que las cadenas permiten el operador [] , puede usar un índice para seleccionar cada carácter de la cadena y verificar si está en minúsculas o mayúsculas.
Además, dijo que necesita mantener el orden de las letras mayúsculas, por lo que no podría simplemente hacer newStr = upper + newStr , porque revertiría el orden original. Entonces, usé string.prototype.substring() para insertar el carácter en mayúscula donde debería estar.
const str = "HeLLoTherE"; const moveUpperToFront = (target) => { // Strings are immutable in js, so you cannot move one character // to the front without using a new string. let newStr = ""; // Number of uppercase letters that appeared. // It's necessary because you need to mantain the original order let upperNumber = 0; // Iterate each character from beginning for (let i = 0; i < str.length; ++i) { // Is there an uppercase letter? if (str[i].charCodeAt() >= 65 && str[i].charCodeAt() <= 90) { newStr = newStr.substring(0, upperNumber) + str[i] + newStr.substring(upperNumber, newStr.length); ++upperNumber; } // No uppercase letter? else newStr += str[i]; } return newStr; }; console.log(moveUpperToFront(str));Esto realmente no es un problema muy difícil:
function rearrange(str) { let result = ""; for (let c of str) if (c >= 'A' && c <= 'Z') result += c; for (let c of str) if (c < 'A' || c > 'Z') result += c; return result; } console.log(rearrange("Hello World, It Is A Beautiful Morning!"));Busque los caracteres en mayúsculas y agréguelos a una cadena de resultado. Luego regrese y busque los otros caracteres, y agréguelos al final. Al recorrer sin ordenar, solo una iteración simple de principio a fin, se conserva el orden (aparte de las mayúsculas).
La parte verdaderamente difícil de esto sería encontrar una forma de detectar letras "mayúsculas" en todo Unicode. Algunos idiomas (bueno, ortografías) no tienen el concepto en absoluto. JavaScript tiene formas que son más y menos convenientes para lidiar con eso, pero sospecho que por el material de clase que el OP tiene disponible hasta ahora, dada la naturaleza de la pregunta original, tal engaño de expresiones regulares probablemente sería inapropiado para una respuesta.