//* Name: 手机拼音输入系统头文件 Copyright: Author: Date: 20-10-06 07:23 Description:手机拼音输入系统头文件 */ #define SIZE 500 struct Node{ char data[10]; struct Node *next;};typedef struct Node SPELL;typedef SPELL *LNode; char *storage[SIZE]; ///////////////////////////////////////////////////////////////////////////////////*函数声明:void ReadFile(const char fileName[]);函数功能:从指定的文件中把所有汉语拼音及对应汉字读入一个指针数组*storage[](全局变量), 数组的每个元素指向文件中的一行。输入变量: const char fileName[],指定的文件名,其中存储了汉字库 输出变量:*storage[],全局变量,每个元素指向一个包含某拼音组合及其对应汉字的字符串返回值: 无 */void ReadFile(const char fileName[]);////////////////////////////////////////////////////////////////////////////////*函数声明:void ReadValue(char value[]);函数功能:读取用户输入的字符串buf,并对其进行适当的转换。 转换规则:先找到结束键'1',删除结束键之后的字符。 若无结束键'1',value[i] = '\0';;并结束程序; 然后在buf中逆序查找#号,直到找到#号或遇到buf的第一个元素为止。 若找到#号,则把#号之后的合法字符(数字)复制到value; 若未找到#号,则把buf的所有合法字符(数字)复制到value; 若只输入结束键'1',表示用户选择离开。 输入变量: char value[],用来存储用户输入的合法字符的字符串 输出变量: char value[],用来存储用户输入的合法字符的字符串 返回值: 无 */void ReadValue(char value[]);///////////////////////////////////////////////////////////////////////////////*函数声明:LNode GetLetterList(const char value[]); 函数功能:首先创建一个指针数组用来存储键盘上的数字字母组合,以该数字为下标,即const char *keyboard[10] = {NULL, NULL,"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; 创建一个空的线性链表LNode letterList。然后调用函数RecursionAnalyse,采用递归的方法,求出数字字符串对应的所有拼音组合,并把它们添加到链表letterList。输入变量: const char value[],用来存储用户输入的合法字符的字符串 输出变量: 无 返回值: LNode letterList,由拼音组合所组成的链表,它的空间在程序执行过程中动态分配 */LNode GetLetterList(const char value[]); ////////////////////////////////////////////////////////////////////////////////////* Name: void OutPutSpell(char letters[],const char value[]) Copyright: Author: Date: 21-10-06 14:38 Description: 函数声明:void OutPutSpell(char letters[],const char value[]); 函数功能:根据整理后得到的字符串value,找出对应的所有拼音组合,创建一个线性链表letterList。把所有满足条件的拼音组合添加到letterList。把存储在letterList中的拼音组合按顺序显示到屏幕,请用户选取一个组合,并把用户选择的拼音存储到letters。 然后销毁线性链表。 输入变量:char letters[],用来存储用户选择的拼音组合 const char value[],用来存储用户输入的合法字符的字符串 输出变量:char letters[],用来存储用户选择的拼音组合返回值: 无*/void OutPutSpell(char letters[], const char value[]);//////////////////////////////////////////////////////////////////////////////////*函数声明:void DistroyList(LNode List); 函数功能:销毁链表letterList。 输入变量:LNode *List,指向线性链表letterList的指针 输出变量:无返回值: 无*/void DistroyList(LNode *List);////////////////////////////////////////////////////////////////////////////////////*函数声明:void OutPutCharacters(const char letters[], char character[]); 函数功能:到*storage[]中找到与letters匹配的元素,将相应的汉字按顺序输出到屏幕, 请用户选取一个汉字, 若用户输入#号或非法字符,存储NULL到character; 若用户输入*号,则继续输出后面的汉字,直到全部输出,然后存储NULL到character; 若用户输入了有效的选择,存储所选择的汉字到character。 输入变量:const char letters[],用来存储用户选择的拼音组合 char character[],用来存储用户选择的汉字 输出变量:char character[],用来存储用户选择的汉字 返回值: 无*/void OutPutCharacters(const char letters[], char character[]); /////////////////////////////////////////////////////////////////////////////*函数声明:void PrintCharacter(const char character[], const char fileName[]); 函数功能:显示用户选取的汉字到屏幕,同时按照追加的方式输出到指定文件 。输入变量:const char character[],用来存储用户选择的汉字 const char fileName[],指定的文件名,用来追加存储用户选择的汉字 输出变量:char character[],用来存储用户选择的汉字 返回值: 无*/void PrintCharacter(const char character[], const char fileName[]); /////////////////////////////////////////////////////////////////////////////* Name: void Introduce(void) Copyright: Author: Date: 19-10-06 20:27 Description: 函数声明:void Introduce(void); 函数功能: 介绍文档 输入变量:无输出变量:无返回值: 无*/void Introduce(void);////////////////////////////////////////////////////////////////////////////////* Name: void Presentation(void) Copyright: Author: Date: 19-10-06 20:27 Description: 函数声明:void Introduce(void); 函数功能: 帮助文档 ,告诉用户如何使用此输入法 输入变量:无输出变量:无返回值: 无*/void Presentation(void);//////////////////////////////////////////////////////////////////////////////* Name: void ShowScreen(void) Copyright: Author: Date: 19-10-06 20:27 Description: 函数声明:void Introduce(void); 函数功能: 显示手机屏幕 输入变量:无输出变量:无返回值: 无*/void ShowScreen(void);/////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// /* Name: 手机拼音输入法 Copyright: free Author: goal Date: 21-10-06 19:44 Description: 版本号1.10*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "SPELL.h" extern char *storage[SIZE]; int main(int argc, char *argv[]){ char inFile[] = "汉字库.txt"; char outFile[] = "输出文件.txt"; char value[81]; char letters[10]; char character[3]; ReadFile(inFile); //读取汉字库 //Introduce(); Presentation(); //告诉用户如何使用此输入法 while (1) //死循环,直到用户选择退出 { ShowScreen(); // 显示手机屏幕 ReadValue(value); //用户输入数据 if (strcmp(value, "QUIT") == 0) //用户选择退出 break; if (value[0] == '\0') //输入无效数据,重新输入数据 { puts("错误:无效数据! 重新输入数据 "); continue; } OutPutSpell(letters, value); //显示拼音列表,供用户选择 if (letters[0] == '\0') //无效选择,重新输入数据 continue; OutPutCharacters(letters, character); //显示汉字列表,供用户选择 if (character[0] == '\0') //无效选择,重新输入数据 continue; PrintCharacter(character, outFile); //显示汉字,并输出到文件 } system("PAUSE"); return 0;}

评论