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

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"

阅读 8.3k
6 个回答

英文字母的 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(" ") // 再把這些分割的字元組合在一起並且用空格分隔
}

例子

思路: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(" ")
      }

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

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

    function alphabetPosition(text) {
        function asc(str){
            return str.charCodeAt(0) - 96
        }
        
          return text.toLowerCase().replace(/\s*/g,'').match(/[a-z]/ig).map(asc).join(' ');
    }
console.log(alphabetPosition("The sunset sets at twelve o' clock."))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题