首页 > 输入字符串,输出每个字母在字母表中的位置?什么思路?

输入字符串,输出每个字母在字母表中的位置?什么思路?

alphabet_position("The sunset sets at twelve o' clock.")
return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11"


要理解一下ASCII码呀 http://baike.baidu.com/link?url=QW7x3SLLxI9YjWksMroFW8-bFIxbXLuXMASvpF0KVFO-itKVtCAzjHYmLiMfHgnKa3htZSZSJaEU_3EBrA_IZ_

    let str = "The sunset sets at twelve o' clock.".toUpperCase();
    for (let i in str) {
        let charCode = str.charCodeAt(i);
        if (65 <= charCode && charCode <= 90)
            console.log(charCode - 64);
    }

我的思路:
1.把26个字母写到一个数组内。
2.把字符串也放到一个数组内,注意:每个字母,是一个数组内元素。
3.两层循环,两个数组内的元素两两比较,相同的输出索引值加1。


思路:1、利用toUpperCase或者toLowerCase转换为大写或者小写,
2、用for循环对字符串中的字符遍历,利用charCodeAt进行获取字符的Unicode编码,其中应该要做一下判断,因为字符串中可能会有其他字符,如空格等,因为A是65,a是97,所以如果转换为了大写,应该减去64,小写应该减去96,如果是字母,将所得值push进一个数组
3、最后利用join方法返回字符串,代码如下

function position(string){
          var strArr=string.toLowerCase();
          var numArr=[];
          for(var i=0;i<strArr.length;i++){
              var num=strArr.charCodeAt(i);
              if(num>96&&num<123){
                  num=num-96;
                  numArr.push(num);
              }
          }
          return numArr.join(" ")
      }

更高效的做法不是直接定义好映射字典,然后遍历输出对应的位置?


英文字母的 ASCII (10進制):

a 97 ~ z 122
所以減去 96 就是在字母表的位置

javascript 提供了 charCodeAt(0) 可以讓我們把字元轉換成 ascii

console.log( alphabet_position("The sunset sets at twelve o' clock.") )

function alphabet_position(string) {
   return string
     .split("") // 分割成字元
     .filter(f => f.toLowerCase() != f.toUpperCase()) // 判定是否為英文字母
     .map(m => m.toLowerCase().charCodeAt(0) - 96 ) // 轉換成小寫取得 ascii 並減去 96
     .join(" ") // 再把這些分割的字元組合在一起並且用空格分隔
}

例子

【热门文章】
【热门文章】