演算法筆記_232:提取拼音首字母(Java)

來源:互聯網
上載者:User

標籤:ascii   char   售票   北京天安門   stack   快速定位   tac   排列   目錄   

目錄

1 問題描述

2 解決方案

  1 問題描述

在很多軟體中,輸入拼音的首寫字母就可以快速定位到某個詞條。比如,在鐵路售票軟體中,輸入: “bj”就可以定位到“北京”。怎樣在自己的軟體中實現這個功能呢?問題的關鍵在於:對每個漢字必須能計算出它的拼音首字母。

GB2312漢字編碼方式中,一級漢字的3755個是按照拼音順序排列的。我們可以利用這個特徵,對常用漢字求拼音首字母。

GB2312編碼方案對每個漢字採用兩個位元組表示。第一個位元組為區號,第二個位元組為區中的位移號。為了能與已有的ASCII編碼相容(中西文混排),區號和位移編號都從0xA1開始。

我們只要找到拼音a,b,c,...x,y,z 每個字母所對應的GB2312編碼的第一個漢字,就可以定位所有一級漢字的拼音首字母了(不考慮多音字的情況)。下面這個表給出了前述資訊。請你利用該表編寫程式,求出常用漢字的拼音首字母。


a 啊 B0A1
b 芭 B0C5
c 擦 B2C1
d 搭 B4EE
e 蛾 B6EA
f 發 B7A2
g 噶 B8C1
h 哈 B9FE
j 擊 BBF7
k 喀 BFA6
l 垃 C0AC
m 媽 C2E8
n 拿 C4C3
o 哦 C5B6
p 啪 C5BE
q 期 C6DA
r 然 C8BB
s 撒 C8F6
t 塌 CBFA
w 挖 CDDA
x 昔 CEF4
y 壓 D1B9
z 匝 D4D1


【輸入、輸出格式要求】

使用者先輸入一個整數n (n<100),表示接下來將有n行文本。接著輸入n行中文串(每個串不超過50個漢字)。

程式則輸出n行,每行內容為使用者輸入的對應行的漢字的拼音首字母。

字母間不留空格,全部使用大寫字母。

例如:
使用者輸入:
3
大家愛科學
北京天安門廣場
軟體大賽

則程式輸出:
DJAKX
BJTAMGC
RJDS

 

 

 

2 解決方案
 1 import java.io.UnsupportedEncodingException; 2 import java.util.Scanner; 3  4 public class Main { 5     public static String[] arrayA = {"啊","芭","擦 ","搭","蛾 ","發 ","噶 ","哈 ", 6         "擊","喀","垃 ","媽 ","拿","哦 ","啪 ","期 ","然 ", "撒 ","塌","挖","昔", 7         "壓","匝"};  8     public static int[] valueA = new int[23]; 9     public static char[] resultA = {‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘J‘,‘K‘,10         ‘L‘,‘M‘,‘N‘,‘O‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘W‘,‘X‘,‘Y‘,‘Z‘};11     12     public int getNum(String A) {13         byte[] a = null;14         try {15             a = A.getBytes("GB2312");16         } catch (UnsupportedEncodingException e) {17             e.printStackTrace();18         }19         int b = ((a[0]<<8)&0xff00) + (a[1]&0xff);20         return b;21     }22     23     public String getResult(String A) {24         int num = getNum(A);25         int i = 0;26         for(;i < 23;i++)27             if(valueA[i] > num)28                 break;29         String r = "" + resultA[i - 1];30         return r;31     }32     33     public static void main(String[] args) {34         Main test = new Main();35         for(int i = 0;i < 23;i++)36             valueA[i] = test.getNum(arrayA[i]);37         Scanner in = new Scanner(System.in);38         int n = in.nextInt();39         String[] result = new String[n];40         for(int i = 0;i < n;i++) {41             String A = in.next();42             StringBuffer s = new StringBuffer("");43             for(int j = 0;j < A.length();j++) {44                 String temp = "" + A.charAt(j);45                 s.append(test.getResult(temp));46             }47             result[i] = s.toString();48         }49         for(int i = 0;i < n;i++)50             System.out.println(result[i]);51     }52 }

 

 

運行結果:

4建設社會主義新農村歐洲給我一個支點我可以撬動地球怎JSSHZYXNCOZGWYGZDWKYQDDQZ

 

演算法筆記_232:提取拼音首字母(Java)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.