在JS中手动将大写字符串转换为小写字符串

问题描述 投票:0回答:5

尝试编写一个函数,返回转换为的调用字符串值 小写。诀窍是我不能使用

toLocaleLowerCase()

以下是我到目前为止所拥有的。

function charChange(char){
    for (var i=0; i<char.length; i++){
        var char2=charCodeAt(char[i])+32;
        var char3=String.fromCharCode(char2);
        if (char3 !== charCodeAt(97-122){
            alert("Please enter only letters in the function")
        }
    }
    return char;
}
javascript char uppercase lowercase
5个回答
3
投票

要将字符串的大写字母手动转换为小写(如果您不手动执行此操作,则应该使用

String.prototype.toLowerCase()
),您必须:

  1. 编写样板函数内容:

    function strLowerCase(str) {
        let newStr = "";
        // TODO
        return newStr;
    }
    
  2. 循环原始字符串的每个字符,并获取其代码点:

    function strLowerCase(str) {
        let newStr = "";
        for(let i = 0; i < str.length; i++) {
            let code = str.charCodeAt(i);
            // TODO
        } return newStr;
    }
    
  3. 检查字符是否为大写字母。 在 ASCII 中,代码点在

    65
    90
    (含)之间的字符为大写字母。

    function strLowerCase(str) {
        let newStr = "";
        for(let i = 0; i < str.length; i++) {
            let code = str.charCodeAt(i);
            if(code >= 65 && code <= 90) {
                // TODO
            } // TODO
        } return newStr;
    }
    
  4. 如果字符是大写的,则将 32 添加到其代码点以使其成为小写(是的,这是 ASCII 创建者的故意设计决定)。无论如何,将新字符附加到新字符串中。

    function strLowerCase(str) {
        let newStr = "";
        for(let i = 0; i < str.length; i++) {
            let code = str.charCodeAt(i);
            if(code >= 65 && code <= 90) {
                code += 32;
            } newStr += String.fromCharCode(code);
        } return newStr;
    }
    
  5. 测试您的新功能:

    strLowerCase("AAAAAAABBBBBBBCCCCCZZZZZZZZZaaaaaaaaaaa&$*(@&(*&*#@!");
    // "aaaaaaabbbbbbbccccczzzzzzzzzaaaaaaaaaaa&$*(@&(*&*#@!"
    

1
投票

charCodeAt()
是在字符串上调用的方法,它不是函数。因此,您将该方法应用于字符串,并将要转换的字符的位置作为参数给出。另外,正如MultiplyByZer0提到的,
char
这个词是保留的:查看保留字列表

以下代码解决了该问题:

function charChange(str) {
  var result = "";

  for (var i = 0; i < str.length; i++) {

    var code = str[i].charCodeAt(0);
    
    if(code >= 65 && code <= 90) {
    
      var letter = String.fromCharCode(code+32);
    
      result += letter // append the modified character

    
    } else {

      result += str[i]  // append the original character
      
    }
    
  }

   return result;
}

console.log(charChange('j#aMIE'));


1
投票

这是我(目前)能想到的两个最优雅的解决方案。查看代码中的注释,如果有任何不清楚的地方,请随时询问。

function charChange1 (str) {
  let result = '';
  const len = str.length;
  
  // go over each char in input string...
  for (let i = 0; i < len; i++) {
    const c = str[i];
    const charCode = c.charCodeAt(0);

    if (charCode < 65 || charCode > 90) {
      // if it is not a uppercase letter,
      // just append it to the output
      // (also catches special characters and numbers)
      result += c;
    } else {
      // else, transform to lowercase first
      result += String.fromCharCode(charCode - 65 + 97);
    }
  }

  return result;
}

function charChange2 (str) {
    // Array.prototype.slice.call(str) converts
    // an array-like (the string) into an actual array
    // then, map each entry using the same logic as above
    return Array.prototype.slice.call(str)
      .map(function (c) {
        const charCode = c.charCodeAt(0);

        if (charCode < 65 || charCode > 90) return c;

        return String.fromCharCode(charCode - 65 + 97);
      })
      // finally, join the array to a string
      .join('');
}

console.log(charChange1("AAAAsfasSGSGSGSG'jlj89345"));
console.log(charChange2("AAAAsfasSGSGSGSG'jlj89345"));


(在侧节点上,当然可以用声明为调用

'A'.charCodeAt(0)
的常量替换幻数)

(第二个侧节点:不要使用 char,因为它是 JavaScript 中的保留字;我更喜欢 c


0
投票

您可以使用 regex 将字符串转换为小写:

:%s/.*/\L&/

0
投票

const lowerCase = ()=>{

    let welcome = prompt("Enter your string");
let lower = '';
for(let i=0; i<welcome.length;i++){
    code =  welcome.charCodeAt(i);

   if(code >= 65 && code <= 90){
    let co = code+32;
    console.log(co);
    lower += String.fromCharCode(co);
   }
   else
   {
    lower +=String.fromCharCode(code) ;
   }
   console.log(lower);
}
}

© www.soinside.com 2019 - 2024. All rights reserved.