• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

                在很多軟件中,輸入拼音的首寫字母就可以快速定位到某個詞條。比如,在鐵路售票軟件中,輸入: “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

             


            結題思路:
            C語言中的一個漢字占兩個字節(兩個char),我們只需把這兩個字節對應的int型數字算出來,然后到編碼表里去比較即可。計算該數字時要用到移位,與,或等位運算操作。
            代碼如下:
            #include<stdio.h>
            #include
            <string.h>
            int N;
            char str[200];
            void pro(){
                
                
            for(int i = 0; i < strlen(str) - 1; )
                
            {
                    
            char c0 = str[i++];
                    
            char c1 = str[i++];
                    
            int t = (int)c0 << 8;//得到高八位 
                    
                    t 
            = t | (0x000000ff & (int)c1);//得到低八位 
                    t &= 0x0000ffff;//去掉負號 
                    
                    
            if(t >= 0xB0A1 && t < 0xB0C5){
                        printf(
            "A");    
                    }

                    
            else if(t < 0xB2C1)
                        printf(
            "B");
                    
            else if(t < 0xB4EE)
                        printf(
            "C");
                    
            else if(t < 0xB6EA)
                        printf(
            "D");
                    
            else if(t < 0xB7A2)
                        printf(
            "E");
                    
            else if(t < 0xB8C1)
                        printf(
            "F");
                    
            else if(t < 0xB9FE)
                        printf(
            "G");
                    
            else if(t < 0xBBF7)
                        printf(
            "H");
                    
            else if(t < 0xBFA6)
                        printf(
            "J");
                    
            else if(t < 0xC0AC)
                        printf(
            "K");
                    
            else if(t < 0xC2E8)
                        printf(
            "L");
                    
            else if(t < 0xC4C3)
                        printf(
            "M");
                    
            else if(t < 0xC5B6)
                        printf(
            "N");
                    
            else if(t < 0xC5BE)
                        printf(
            "O");
                    
            else if(t < 0xC6DA)
                        printf(
            "P");
                    
            else if(t < 0xC8BB)
                        printf(
            "Q");
                    
            else if(t < 0xC8F6)
                        printf(
            "R");
                    
            else if(t < 0xCBFA)
                        printf(
            "S");
                    
            else if(t < 0xCDDA)
                        printf(
            "T");
                    
            else if(t < 0xCEF4)
                        printf(
            "W");
                    
            else if(t < 0xD1B9)
                        printf(
            "X");
                    
            else if(t < 0xD4D1)
                        printf(
            "Y");
                    
            else 
                        printf(
            "Z");
                        
                }

                printf(
            "\n");
                    
            }


            int main()
            {    
                scanf(
            "%d"&N);
                getchar();
                
            for(int i = 0; i < N; i++)
                
            {
                    gets(str);
                    pro();
                }

                
                
            //getchar();
            }




            posted on 2013-07-09 11:04 小鼠標 閱讀(1213) 評論(0)  編輯 收藏 引用 所屬分類: C語言
            <2012年8月>
            2930311234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            常用鏈接

            隨筆分類(111)

            隨筆檔案(127)

            friends

            最新評論

            • 1.?re: 線段樹
            • 是這個樣子的,所以在OJ有時候“卡住”了也不要太灰心,沒準真的不是自己的原因呢。
              加油,祝你好運啦!
            • --小鼠標
            • 2.?re: 線段樹
            • 對于編程競賽來說,Java所需時間一般為C/C++的兩倍。合理的競賽給Java的時間限制是給C/C++的兩倍。
            • --傷心的筆
            • 3.?re: poj1273--網絡流
            • 過來看看你。
            • --achiberx
            • 4.?re: (轉)ubuntu11.10無法啟動無線網絡的解決方法
            • 膜拜大神。。查了一個下午資料終于在這里解決了問題。。神牛說的區域賽難道是ACM區域賽。。?
            • --Hang
            • 5.?re: 快速排序、線性時間選擇
            • 博主,謝謝你的文章。你的方法可以很好的處理分區基準在數組中重復的情況,書上的方法遇到這種輸入會堆棧溢出。書上給出了解釋但給的方法貌似不簡潔。
            • --lsxqw2004

            閱讀排行榜

            中文精品99久久国产| 精品无码久久久久国产| 精品人妻伦一二三区久久| 久久精品无码免费不卡| 欧美激情精品久久久久久久| 无码久久精品国产亚洲Av影片| 久久综合九色综合欧美狠狠| 一级a性色生活片久久无| 久久精品国产亚洲av日韩| 国内精品久久久久久中文字幕| 麻豆精品久久久久久久99蜜桃 | 亚洲精品乱码久久久久久| 国产精品久久久久AV福利动漫 | 久久人人爽人人爽AV片| 中文字幕久久精品无码| 久久播电影网| 免费观看成人久久网免费观看| 久久久SS麻豆欧美国产日韩| 国产成人香蕉久久久久| 激情伊人五月天久久综合| 久久久无码精品亚洲日韩京东传媒| 久久国产视频99电影| 2020最新久久久视精品爱| 超级碰碰碰碰97久久久久| 久久久久久国产精品免费免费| 99久久婷婷免费国产综合精品| 蜜臀av性久久久久蜜臀aⅴ| 国产精品99久久久精品无码| 久久婷婷五月综合97色直播| 久久精品国产亚洲av高清漫画 | 色偷偷88888欧美精品久久久| 中文字幕久久亚洲一区| 亚洲精品久久久www| 久久精品国产亚洲精品| 久久国产精品波多野结衣AV| 久久国产精品-国产精品| 97久久精品午夜一区二区| 久久久久久午夜成人影院| 久久精品人人做人人爽97| 久久久久久久人妻无码中文字幕爆| 99精品国产99久久久久久97|