Salut C'est la première fois que j'utilise ce site Web, j'ai fait des recherches sur la façon de convertir la lettre minuscule en lettre majuscule mais toujours les filles. L'obligation est de vérifier si "pair", de convertir la lettre du chiffre pair en un type différent (inférieur à supérieur ou supérieur à inférieur). ci-dessous est mon code:

function question4(str,pos)
    {   var newLetter;
    var kkk=str;

        if (pos='even')
        {
            for (var i=0;i<str.length;i=i+2)
            {
                if (str[i].toString()==str[i].toString().toUpperCase())
                {
                    newLetter=str[i].toString().toLowerCase();
                    kkk[i]=newLetter;
                }else
                {
                    newLetter=str[i].toUpperCase();
                    kkk[i]=newLetter;
                }
            }
        }else if (pos='odd')
                    for ( i=0;i<str.length;i=i+2)
                    {
                        if (str[i]===str[i].toLowerCase())
                        {
                            alert('3');
                        }else if (str[i]===str[i].toUpperCase())
                        {
                            alert('4');
                        }
                    }
                    return kkk;
    }

L'exigence est: Ecrire une fonction pour changer la casse de tous les caractères de la chaîne en fonction de leur position qui correspond à la valeur de la fonction de paramètre pos. fonction (str, pos [pair | impair]). Exemple ((«abCd», «impair») renvoie Abcd)

Mise à jour: maintenant que je fais fonctionner la condition "impaire", mais "même" ne fonctionne toujours pas, quelqu'un peut-il jeter un œil pourquoi?

function question4(strr,pos) {
var result  ;
var sum="";
var aaa;

for (var i = 0; i <= strr.length - 1; i = i + 1)
{
    if (pos == "odd"&&i%2==0)
    {   aaa=strr.charCodeAt(i);

        if (aaa >= 65 && aaa <= 90 )
        {
            result = String.fromCharCode(aaa + 32);
        } else
            result = String.fromCharCode(aaa - 32);
    }
    else if (pos == "even"&&i%2==1)
    {
        if (aaa >= 65 && aaa <= 90 )
        {
            result= String.fromCharCode(aaa + 32);
        } else
            result = String.fromCharCode(aaa - 32);
    }else result=strr[i];
    sum+=result;
}


return sum;

}

1
David Shi 12 avril 2018 à 19:48

3 réponses

Meilleure réponse

Pour ce faire, vous pouvez construire une chaîne en concatérant char par char:

function question4(strInput, pos) {
  let str = ""; // The string to construct
  if (!pos || (pos !== "even" && pos !== "odd")) { // Validating pos
    throw "invalid pos";
  }
 for (var i=0;i<strInput.length;i++) // Looping on strInput
 {  
   let huPos = i + 1;
   if ((pos === "even" && huPos%2 == 1) ||
      (pos === "odd" && huPos%2 == 0)) { 
/* If we want switch odd and we are on even position or if we want switch even and we are on odd position, then we add the original char
*/
     str += strInput[i];
   }
   else {
     // In others case, we switch lower to upper and upper to lower
     let char = strInput[i];
     str += char == char.toUpperCase() ? char.toLowerCase() : char.toUpperCase();
   }
 }
 return str;
}
console.log(question4('abCdef', "odd")); // Return "AbcdEf"

Bac associé

ÉDITER:

Après avoir vu modifier, je peux voir que vous voulez le faire sans utiliser toLower / UpperCase. Comme indiqué dans le commentaire, je pense que c'est une mauvaise idée en js, mais pour expérimenter, vous pouvez y parvenir:

const reverser = {
  "a": "a".charCodeAt(0),
  "z": "z".charCodeAt(0),
  "A": "A".charCodeAt(0),
  "Z": "Z".charCodeAt(0),
};
const conversionValueToLower = reverser.a - reverser.A;
const conversionValueToUpper = reverser.A - reverser.a;
function reverseChar(char) {
  var code = char.charCodeAt(0);
    // If you want to go from upper to lower
    if (code >= reverser.A && code <= reverser.Z) {
       // Simply add the difference between lower and upper
      return String.fromCharCode(code + conversionValueToLower);
    } // Same logic here
    else if (code >= reverser.a && code <= reverser.z) {
      return String.fromCharCode(code + conversionValueToUpper);
    }
  /**
  Or use if you want full digit
  if (code <= 90 && code >= 65) {
    return String.fromCharCode(code + 32);
  }
  else if (code >= 97 && code <= 122) {
    return String.fromCharCode(code - 32);
  }
  **/
  return char; // Other case return original char
}

function question4(strInput, pos) {
  let str = "";
  if (!pos || (pos !== "even" && pos !== "odd")) {
    throw "invalid pos";
  }
 for (var i=0;i<strInput.length;i++)
 {  
   let huPos = i + 1;
   if ((pos === "even" && huPos%2 == 1) ||
      (pos === "odd" && huPos%2 == 0)) {
     str += strInput[i];
   }
   else {
     str += reverseChar(strInput[i]);
   }
 }
 return str;
}
console.log(question4('abCdef', "odd")); // return "AbcdEf"

Bac associé

Une autre façon pourrait être de coder des fonctions utils imitant toLower / UpperCase

J'ai également corrigé votre code dans votre réponse, sans changer la logique d'origine

function question4(strr,pos) {
  var result  ;
  var sum="";
  var aaa;

  for (var i = 0; i <= strr.length - 1; i = i + 1)
  {
    if (pos == "odd"&&i%2==0)
    {   aaa=strr.charCodeAt(i);

     if (aaa >= 65 && aaa <= 90 )
     {
       result = String.fromCharCode(aaa + 32);
     } else if(aaa >=97&&aaa <=122)
     { result = String.fromCharCode(aaa - 32);}
     else {result=strr[i];}
    }
    else if (pos == "even"&&i%2==1)
    {   aaa=strr.charCodeAt(i);
     if (aaa >= 65 && aaa <= 90 )
     {
       result= String.fromCharCode(aaa + 32);
     } else if(aaa >=97&&aaa <=122)
     { result = String.fromCharCode(aaa - 32);}
     else {result=strr[i];}
    }else {result=strr[i];}
    sum+=result;
  }


  return sum;
}

console.log(question4("abCd", "odd")) // return Abcd;
0
Ngob 20 avril 2018 à 02:54

Une solution simple pour cette question

// Function used to invert the letter case
const changeCase = c => {
  if (c === c.toUpperCase()) return c.toLowerCase()
  return c.toUpperCase()
}

const swapCaseConditional = (str, pos) => {
  // Use split method to convert string into array and map the array
  return str.split('').map((c, index) => {
    if (pos === 'even') {
      // if pos and index are even, change the letter case
      if (index % 2) return changeCase(c)
      return c
    }
    else {
      // if pos and index are odd, change the letter case
      if (!(index%2)) return changeCase(c)
      return c
    }
    // Convert to string
  }).join('')
}

console.log(swapCaseConditional('abCd', 'odd'))
0
Lucas Alencar 13 avril 2018 à 17:58

J'ai travaillé deux nuits et j'ai finalement réussi à le faire fonctionner. bien que ne couvrent pas entièrement toutes les situations, mais presque là.

function question4(strr,pos) {
var result  ;
var sum="";
var aaa;

for (var i = 0; i <= strr.length - 1; i = i + 1)
{
    if (pos == "odd"&&i%2==0)
    {   aaa=strr.charCodeAt(i);

        if (aaa >= 65 && aaa <= 90 )
        {
            result = String.fromCharCode(aaa + 32);
        } else
            result = String.fromCharCode(aaa - 32);
    }
    else if (pos == "even"&&i%2==1)
    {   aaa=strr.charCodeAt(i);
        if (aaa >= 65 && aaa <= 90 )
        {
            result= String.fromCharCode(aaa + 32);
        } else if(aaa >=97&&aaa <=122)
        { result = String.fromCharCode(aaa - 32);}
        else {result=strr[i];}
    }else {result=strr[i];}
    sum+=result;
}


return sum;

}

0
David Shi 16 avril 2018 à 22:34