//*
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;
}
评论