• <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>

            系統(tǒng)功能:
             手機的漢語拼音輸入法很'聰明',只要用數(shù)字鍵組合,就能夠自動找到能組成拼音的字母組合.從2開始分別代表2:abc,3:def,4:ghi,5:jkl,6:mno,7:pqrs,8:tuv,9:wxyz"
            鍵盤布局如圖示 +-------+-------+-------+
                     |1 OK   |2 abc  |3 def  |
                 +-------+-------+-------+
                 |4 ghi  |5 jkl  |6 mno  |
                 +-------+-------+-------+
                 |7 pqrs |8 tuv  |9 wxyz |
                 +-------+-------+-------+
                 |#<prep>|0<back>|*<next>|
                 +-------+-------+-------+
            拼音規(guī)則:輸入時手機有3個狀態(tài):
            1. 拼音狀態(tài): 只接受2至9,和結(jié)束鍵1。按下1則進入狀態(tài)2,如果候選拼音組合唯一則自動進入狀態(tài)3(此時拼音不必拼完);如果無匹配的拼音組合,則一直忽略直到遇到#取消當(dāng)前拼音。若用戶輸入非法字符,則自動屏蔽非法字符,只讀取合法字符。若只輸入結(jié)束鍵1,表示用戶選擇離開。
            2. 選擇拼音狀態(tài) : 根據(jù)用戶輸入的數(shù)字組合,在屏幕上列出滿足條件的拼音組合,每頁最多有10個組合,按字母順序標(biāo)號由0到9。接受0-9任何一個鍵則選擇對應(yīng)組合進入狀態(tài)3。忽略選擇不存在組合的位置的數(shù)字。接受*則下翻一頁。如果已經(jīng)到達最后一頁則忽略*號。接受#則取消當(dāng)前拼音,并回到狀態(tài)1。
            3. 漢字選擇狀態(tài): 進入本狀態(tài),如果所選的拼音組合包含對應(yīng)漢字。則可以選擇漢字。否則回到狀態(tài)1,并且此時不輸出任何漢字。每頁最多有10個漢字,按輸入的數(shù)據(jù)順序排列。接受0-9任何一個鍵則選擇對應(yīng)漢字并輸出輸出后回到拼音狀態(tài)。忽略選擇不存在組合的位置的數(shù)字。接受#則取消當(dāng)前拼音,并回到狀態(tài)1。
            注意:提供一個文本文件,里面包含所有的漢語拼音及對應(yīng)漢字。文件包含若干行,每行2個字符串,串之間有1個空格分開。行尾沒有空格。第一個串只包含英文字母,表示一個有效的拼音發(fā)音組合。后一個串包含若干個漢字。每個漢字是2個字節(jié)組成的。第一個字節(jié)最高位為1,第二個字節(jié)在0x40到0xfe之間,且不為0x7f。


            總體設(shè)計:
            一。讀取文件信息
                1。從文件中把所有漢語拼音及對應(yīng)漢字讀入內(nèi)存。因為文件中的每個拼音及其所有同音字處在同一行中,故可用一個指針數(shù)組*storage[]存儲文件內(nèi)容,數(shù)組的每個元素指向文件中的一行。

            二。讀取用戶數(shù)據(jù)
                2。讀取用戶輸入的字符串,并對其進行適當(dāng)?shù)霓D(zhuǎn)換,判斷字符串是否合法,并屏蔽非法字符得到一個只包含合法數(shù)字字符的新字符串。

            三。處理用戶數(shù)據(jù),并請用戶選擇正確的拼音和漢字
                3。采用遞歸的方法,求出數(shù)字字符串對應(yīng)的所有拼音組合,把所有滿足條件的拼音組合添加到線性鏈表letterList。
                4。把匹配的拼音組合按順序顯示到屏幕,請用戶選取一個組合。
                5。根據(jù)選中的拼音組合,到*storage[]中找到相應(yīng)的漢字,并按順序輸出到屏幕,請用戶選取一個漢字。
                6。輸出用戶選取的漢字,同時輸出到文件。

            四。重復(fù)步驟2-6,直到用戶選擇退出。


            詳細設(shè)計:
            一。讀取文件信息
            1。從文件中把所有漢語拼音及對應(yīng)漢字讀入內(nèi)存。因為文件中的每個拼音及其所有同音字處在同一行中,故可用一個指針數(shù)組*storage[]存儲文件內(nèi)容,數(shù)組的每個元素指向文件中的一行。因為工程中很多函數(shù)都要用到指針數(shù)組*storage[],因此把它設(shè)置成全局變量。
            實現(xiàn)函數(shù):void ReadFile(const char fileName[]);
            /*
            函數(shù)聲明:void ReadFile(const char fileName[]);
            函數(shù)功能:從指定的文件中把所有漢語拼音及對應(yīng)漢字讀入一個指針數(shù)組*storage[](全局變量),
              數(shù)組的每個元素指向文件中的一行。
            輸入變量: const char fileName[],指定的文件名,其中存儲了漢字庫
            輸出變量:*storage[],全局變量,每個元素指向一個包含某拼音組合及其對應(yīng)漢字的字符串
            返回值: 無 
            */

            二。讀取用戶數(shù)據(jù)
            2。讀取用戶輸入的字符串buf,并對其進行適當(dāng)?shù)霓D(zhuǎn)換,判斷字符串是否合法,并屏蔽非法字符得到一個只含合法數(shù)字字符的新字符串value。
            轉(zhuǎn)換規(guī)則:先找到結(jié)束鍵'1',刪除結(jié)束鍵之后的字符。若無結(jié)束鍵'1',value[i] = '\0';并結(jié)束程序;
            然后在buf中逆序查找#號,直到找到#號或遇到buf的第一個元素為止。若找到#號,則把#號之后的合法字符(數(shù)字)復(fù)制到value;
            若未找到#號,則把buf的所有合法字符(數(shù)字)復(fù)制到value;若只輸入結(jié)束鍵'1',表示用戶選擇離開。
            實現(xiàn)函數(shù):void ReadValue(char value[]);
            /*
            函數(shù)聲明:void ReadValue(char value[]);
            函數(shù)功能:讀取用戶輸入的字符串buf,并對其進行適當(dāng)?shù)霓D(zhuǎn)換。
                轉(zhuǎn)換規(guī)則:先找到結(jié)束鍵'1',刪除結(jié)束鍵之后的字符。
                若無結(jié)束鍵'1',value[i] = '\0';;并結(jié)束程序;
                然后在buf中逆序查找#號,直到找到#號或遇到buf的第一個元素為止。
                若找到#號,則把#號之后的合法字符(數(shù)字)復(fù)制到value;
                若未找到#號,則把buf的所有合法字符(數(shù)字)復(fù)制到value;
                若只輸入結(jié)束鍵'1',表示用戶選擇離開。
            輸入變量: char value[],用來存儲用戶輸入的合法字符的字符串
            輸出變量: char value[],用來存儲用戶輸入的合法字符的字符串
            返回值: 無  
            */

            三。處理用戶數(shù)據(jù),并請用戶選擇正確的拼音和漢字
                此部分可分成三個步驟:先分析并得到正確的拼音組合,再根據(jù)拼音組合得到正確的漢字,最后輸出該漢字。
            3。 獲取正確的拼音組合:(若value[0] = '\0';,則跳到第6步)
            實現(xiàn)函數(shù):void OutPutSpell(char letters[],const char value[]);
            /*
            函數(shù)聲明:void OutPutSpell(char letters[],const char value[]);
            函數(shù)功能:根據(jù)整理后得到的字符串value,找出對應(yīng)的所有拼音組合,創(chuàng)建一個線性鏈表letterList,
            把所有滿足條件的拼音組合添加到letterList。把存儲在letterList中的拼音組合按順序顯示到屏幕,
            請用戶選取一個組合,并把用戶選擇的拼音存儲到letters。 然后銷毀線性鏈表。
            輸入變量:char letters[],用來存儲用戶選擇的拼音組合 
              const char value[],用來存儲用戶輸入的合法字符的字符串 
            輸出變量:char letters[],用來存儲用戶選擇的拼音組合
            返回值: 無
            */

            該函數(shù)包括四個主要功能函數(shù):
            LNode GetLetterList(const char value[]);
            void ChooseSpell(LNode head, char letters[]);
            void RecursionAnalyse(const char *keyboard[], const char value[], int pos, char buf[], LNode Head);
            void DistroyList(LNode List);

            /*
            函數(shù)聲明:LNode GetLetterList(const char value[]); 
            函數(shù)功能:首先創(chuàng)建一個指針數(shù)組用來存儲鍵盤上的數(shù)字字母組合,以該數(shù)字為下標(biāo),即
            const char *keyboard[10] = {NULL, NULL,"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
            創(chuàng)建一個空的線性鏈表LNode letterList。
            然后調(diào)用函數(shù)RecursionAnalyse,采用遞歸的方法,求出數(shù)字字符串對應(yīng)的所有拼音組合,并把它們添加到鏈表letterList。
            輸入變量: const char value[],用來存儲用戶輸入的合法字符的字符串
            輸出變量: 無
            返回值: LNode letterList,由拼音組合所組成的鏈表,它的空間在程序執(zhí)行過程中動態(tài)分配
            */
            /*
            函數(shù)聲明:void ChooseSpell(LNode head, char letters[]);
            函數(shù)功能:把存儲在鏈表letterList中的拼音組合按順序顯示到屏幕,請用戶選取一個組合,
              若用戶輸入#號存儲letters[0] = '\0';
              若用戶輸入*號,則繼續(xù)輸出后面的拼音組合,直到全部輸出';
              若用戶輸入了有效的選擇,存儲所選擇的拼音組合到letters。
              若用戶輸入非法字符或在末頁輸入*號,報錯并要求重新輸入。
            輸入變量:LNode Head,線性鏈表letterList 的頭結(jié)點
              char letters[],用來存儲用戶選擇的拼音組合 
            輸出變量:char letters[],用來存儲用戶選擇的拼音組合
            返回值: 無
            */
            /*
            函數(shù)聲明:void RecursionAnalyse(const char *keyboard[], const char value[], int pos, char buf[], LNode Head);    
            函數(shù)功能:遞歸調(diào)用本函數(shù),求出所有的拼音組合,每求出一個拼音組合便將其構(gòu)造成一個字符串,
              把該字符串作為結(jié)點數(shù)據(jù)插入鏈表letterList。
            輸入變量: const char *keyboard[],用來存儲手機鍵盤信息的指針數(shù)組,根據(jù)輸入的數(shù)字可以得到相應(yīng)的字母
              const char value[],用來存儲用戶輸入的合法字符的字符串
              int pos, 當(dāng)前所處理的value的元素的下標(biāo)
              LNode Head,線性鏈表letterList 的頭結(jié)點 
            輸出變量: LNode Head,線性鏈表letterList 的頭結(jié)點 
            返回值: 無
            */
            /*
            函數(shù)聲明:void DistroyList(LNode List);
            函數(shù)功能:銷毀鏈表letterList。
            輸入變量:LNode *List,指向線性鏈表letterList的指針
            輸出變量:無
            返回值: 無
            */

            4。獲取正確的漢字:(若letters[0] = '\0',則跳到第6步)
            實現(xiàn)函數(shù):void OutPutCharacters(const char letters[], char characters[]);
            /*
            函數(shù)聲明:void OutPutCharacters(const char letters[], char character[]);
            函數(shù)功能:到*storage[]中找到與letters匹配的元素,將相應(yīng)的漢字按順序輸出到屏幕,
              請用戶選取一個漢字,
              若用戶輸入#號或非法字符,存儲NULL到character;
              若用戶輸入*號,則繼續(xù)輸出后面的漢字,直到全部輸出,然后存儲NULL到character;
              若用戶輸入了有效的選擇,存儲所選擇的漢字到character。
            輸入變量:const char letters[],用來存儲用戶選擇的拼音組合 
              char character[],用來存儲用戶選擇的漢字 
            輸出變量:char character[],用來存儲用戶選擇的漢字 
            返回值: 無
            */
            該函數(shù)包括三個主要功能函數(shù):
            int MatchCharacters(const char letters[], int pos);
            void SaveCharacters(char charactersStorage[][3], char source[]);
            void ChooseCharacters(char character[], const char charactersStorage[][3]);

            /*
            函數(shù)聲明:int MatchCharacters(const char letters[], int pos);
            函數(shù)功能:判斷storage[pos]中的拼音組合是否與字符串letters相同
            輸入變量: const char letters[],用來存儲用戶選擇的拼音字符串
                 int pos, 當(dāng)前所處理的storage的指針元素的下標(biāo)
            輸出變量:無
            返回值: 相同則返回1,否則返回0
            */
            /*
            函數(shù)聲明:void SaveCharacters(char charactersStorage[][3], char source[]);
            函數(shù)功能:把source中的漢字存儲到charactersStorage中
            輸入變量:char charactersStorage[][3], 用來存儲與拼音letters對應(yīng)的所有漢字
                char source[], storage的一個指針元素,它的拼音部分與letters相同
            輸出變量: char charactersStorage[][3], 用來存儲與拼音letters對應(yīng)的所有漢字
            返回值:無
            */
            /*
            函數(shù)聲明:void ChooseCharacters(char character[], const char charactersStorage[][3]);
            函數(shù)功能:把存儲在charactersStorage中的漢字按順序顯示到屏幕,請用戶選取一個組合,
              若用戶輸入#號存儲character[0] = '\0';
              若用戶輸入*號,則繼續(xù)輸出后面的漢字,直到全部輸出';
              若用戶輸入了有效的選擇,存儲所選擇的漢字到character。
              若用戶輸入非法字符或在末頁輸入*號,報錯并要求重新輸入。
            輸入變量:char character[],用來存儲用戶選擇的漢字 
              const char charactersStorage[][3],用來存儲所有同音字 
            輸出變量:char character[],用來存儲用戶選擇的漢字 
            返回值: 無
            */

            5。顯示用戶選取的漢字到屏幕,同時按照追加的方式輸出到指定文件 。
            實現(xiàn)函數(shù):void PrintCharacter(const char character[], const char fileName[]);
            /*
            函數(shù)聲明:void PrintCharacter(const char character[], const char fileName[]);
            函數(shù)功能:顯示用戶選取的漢字到屏幕,同時按照追加的方式輸出到指定文件 。
            輸入變量:const char character[],用來存儲用戶選擇的漢字
              const char fileName[],指定的文件名,用來追加存儲用戶選擇的漢字
            輸出變量:char character[],用來存儲用戶選擇的漢字 
            返回值: 無
            */

            6。重復(fù)步驟2-5,直到用戶選擇退出。

            注意:這里只列出了一些主要函數(shù),其他功能函數(shù)由程序員自行設(shè)計。要求每個函數(shù)均要做好單體測試后再加入工程中。

            Posted on 2006-10-21 19:56 夢想飛揚 閱讀(797) 評論(1)  編輯 收藏 引用

            Feedback

            # rdgyryt  回復(fù)  更多評論   

            2006-11-30 08:26 by ytyhtr
            sgrghrf

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            亚洲精品第一综合99久久| 青青草原综合久久| 一本一本久久a久久精品综合麻豆| 久久久久久国产精品免费免费| 久久午夜综合久久| 中文成人久久久久影院免费观看| 亚洲七七久久精品中文国产 | 国产亚洲精品久久久久秋霞| 久久精品人妻中文系列| 久久久久亚洲av无码专区喷水| 久久人爽人人爽人人片AV| 88久久精品无码一区二区毛片| 久久嫩草影院免费看夜色| 欧美午夜精品久久久久免费视 | 亚洲AV日韩AV天堂久久| 久久青青草原综合伊人| 久久久久久久波多野结衣高潮 | 人人妻久久人人澡人人爽人人精品| 国产69精品久久久久久人妻精品| 狠狠狠色丁香婷婷综合久久五月 | 精品久久久久久无码中文字幕一区| 中文字幕亚洲综合久久| 亚洲综合熟女久久久30p| 精品欧美一区二区三区久久久| 亚洲国产另类久久久精品小说| 亚洲成人精品久久| 久久久久亚洲AV无码永不| 欧美精品九九99久久在观看| 久久国产影院| 91久久精品国产91性色也| 久久男人Av资源网站无码软件 | 久久99精品国产麻豆宅宅| 久久国产精品二国产精品| 久久久精品免费国产四虎| 国产亚洲精久久久久久无码| 久久国产精品一国产精品金尊 | 国产一区二区三区久久| 精品无码久久久久国产| 奇米影视7777久久精品| 久久久亚洲欧洲日产国码aⅴ| 欧美一区二区三区久久综合|