iT邦幫忙

0

請問如何將輸入對應英文字轉換為數字?

例:2=ABC, 3=DEF, 4=GHI, 5=JKL,
6=MNO, 7=PRS, 8=TUV, 9=WXY

輸入 A-BDG-WWX
則輸出 2-234-999

看更多先前的討論...收起先前的討論...
請提供你在使用的程式語言吧
很好奇,怎會有這樣的用途?!
allenlwh iT邦研究生 1 級 ‧ 2020-10-16 08:44:45 檢舉
如果有一天要反解回來,要怎麼解出原來輸入的東西?
slime iT邦大師 1 級 ‧ 2020-10-16 08:46:16 檢舉
大概是傳統電話上的 數字對應某幾個字母 吧?

而歐美國家常用這種對應來方便記憶, 例如(虛構):
PlayBoy 訂購專線: 州碼-區碼-7529269
在廣告上就會印成: 州碼-區碼-PlayBoy

後來智慧型手機輸入號碼時, 也會搜尋通訊錄內相符的字母.

做法: 陣列或查表(較快), 用字母比對(慢很多)

(這種沒有反解, 只是搜尋或方便聯想.)
T9輸入法..
2
海綿寶寶
iT邦大神 1 級 ‧ 2020-10-16 21:56:17
最佳解答
#include <stdio.h>

#define STRLEN  20

int main(void) {
    char conv[25]={
        '2','2','2',
        '3','3','3',
        '4','4','4',
        '5','5','5',
        '6','6','6',
        '7','7','7','7',
        '8','8','8',
        '9','9','9'
    };
    char str[STRLEN];

    fgets(str, sizeof(str), stdin);

    int i=0;
    while ((i<STRLEN)&&(str[i] != '\n')) {
        if ((str[i] >= 'A')&&(str[i] <= 'Y')&&(str[i] != 'Q')) {
            printf("%c", conv[str[i]-'A']);
        } else {
            printf("%c", str[i]);
        }
        i++;
    }

    return 0;
}
ktro12 iT邦新手 5 級 ‧ 2020-10-17 00:15:50 檢舉

感謝

3
一級屠豬士
iT邦大師 1 級 ‧ 2020-10-16 11:47:23

不做防呆,簡單用Python

 #!/usr/bin/env python3

alphanum = {'A': '2', 'B': '2', 'C': '2',
            'D': '3', 'E': '3', 'F': '3',
            'G': '4', 'H': '4', 'I': '4',
            'J': '5', 'K': '5', 'L': '5',
            'M': '6', 'N': '6', 'O': '6',
            'P': '7', 'R': '7', 'S': '7',
            'T': '8', 'U': '8', 'V': '8',
            'W': '9', 'X': '9', 'Y': '9'
           }

def tran(x):
  if x == '-':
    return x
  else:
    return alphanum[x]

lst = 'A-BDG-WWX'
print(lst)
print( ''.join(list(map(tran, lst))))

result:

|=> ./dictmap1.py 
A-BDG-WWX
2-234-999
slime iT邦大師 1 級 ‧ 2020-10-16 12:53:55 檢舉

我會考慮另一種變態法:
A = asc(65),

所以 asc - 49 後 除以 3 再 int 就算出來了.... ;p

(查表還是比較快 XD )

ktro12 iT邦新手 5 級 ‧ 2020-10-17 00:15:58 檢舉

感謝

2
通靈亡
iT邦研究生 4 級 ‧ 2020-10-16 13:39:15

單純考慮資料擴充的方便性,用 map + array的寫法 (Javascript)
演算法可以再優化

let digitalCharMap = {
    '-': ['-'],
    '2': ['A', 'B', 'C'],
    '3': ['D', 'E', 'F'],
    '4': ['G', 'H', 'I'],
    '5': ['J', 'K', 'L'],
    '6': ['M', 'N', 'O'],
    '7': ['P', 'R', 'S'],
    '8': ['T', 'U', 'V'],
    '9': ['W', 'X', 'Y']
}

function getIntOfString (inputString) {
    let result = ''

    for (let singleChar of inputString ) {
      let isExists = false

      for (let numKey in digitalCharMap) {
        if (digitalCharMap[numKey].indexOf(singleChar) >= 0) {
          result += numKey
          isExists = true
        }
      }

      if (isExists !== true) {
          return `${singleChar} is not exists`
      }
    }
    return result
}


console.log(getIntOfString('ADA-B'))
//output: "232-2"

console.log(getIntOfString('ADZ-B'))
//output: "Z is not exists"
ktro12 iT邦新手 5 級 ‧ 2020-10-17 00:16:03 檢舉

感謝

0
sky800219
iT邦新手 5 級 ‧ 2020-10-19 21:48:20

謝謝

我要發表回答

立即登入回答