分享纯C语言英汉字典源码
来源:互联网 发布:ipad发展 知乎 编辑:程序博客网 时间:2024/05/17 01:33
近期深受开源的精神影响,并为之深深感动,想了很久,今天把我代码积累多年的一个“英汉字典”公布。
研一的时候因为无聊或者因为兴趣,做了一个纯C语言的英汉字典。核心算法是KMP快速查找算法,虽然有点长,但思想简单(我崇尚简单),基本思想为:当你输入某个英文时,如果字典收录了这个英文,会查出中文意思;如果没有收录,会提醒你输入中文意思。
做的时间比较久了,现在运行起来不是原本的意思,有空我会慢慢改进。
若你有心可以在此基础上改进,也可以告诉我哪里可以改进。谢谢!
/************************** 快速模式匹配---KMP算法 **************************/#include <stdio.h>#define MAXSIZE 10000typedef struct{ char ch[MAXSIZE];int length;}Seqstr;void Getnext(Seqstr p, int next[]);void Kmp(Seqstr t, Seqstr p, int next[]);void InputStr(Seqstr &str);void OutputStr(Seqstr &str);void FileToStr(FILE *fp, Seqstr &t);int main(void){int next[30];FILE *fp;Seqstr p, t;p.length = 0;t.length = 0; InputStr(p); OutputStr(p);fp = fopen("word.txt", "r"); //InputStr(t);if (fp != NULL){ FileToStr(fp, t); fclose(fp); OutputStr(t);Getnext(p, next); Kmp(t, p, next); } else{ printf("can't open file!\n");}return 0;}void FileToStr(FILE *fp, Seqstr &str){printf("input string from file...\n");while (!feof(fp)){str.ch[str.length] = fgetc(fp); str.length++;}str.ch[str.length] = '\0';}void InputStr(Seqstr &str){char c;printf("input a string:"); while((c = getchar()) != '\n'){str.ch[str.length] = c;str.length++;}str.ch[str.length] = '\0';}void OutputStr(Seqstr &str){int i = 0; while(str.ch[i] != '\0'){printf("%c", str.ch[i]);i++;}printf("\n");}void Kmp(Seqstr t, Seqstr p, int next[]){ int i, j;int appearTimes = 0;int lines = 1;i = 0;j = 0;while(i < t.length){while (i < t.length && j < p.length){if (j == -1 || t.ch[i] ==p.ch[j]){i++;j++;}else{j = next[j];}if (t.ch[i] == '\n') //计算行数{ lines++;i++;}}//whileif(j == p.length) //首次出现的位置(return i-p.length){appearTimes++;printf("The %d times appear at line: %d\n", appearTimes, lines);j = 0;}}//while}void Getnext(Seqstr p, int next[]){ int i, j;next[0] = -1;i = 0;j = -1;while(i < p.length){if(j == -1 || p.ch[i] == p.ch[j]){++i;++j;next[i] = j;}else{j = next[j];}}for(i = 0; i < p.length; i++){printf("next[%d] = %3d\n", i, next[i]);}printf("\n");}
测试数据:
good好的hi你好
- 分享纯C语言英汉字典源码
- 纯C语言:递归二进制转十进制源码分享
- 纯C语言写的拼图游戏源码
- 纯C语言:谈心会议安排源码
- 纯C语言:括号匹配源码
- 纯C语言:分治快速排序源码
- 纯C语言:分治检索源码
- 纯C语言:分治假币问题源码
- 纯C语言:递归最大数源码
- 纯C语言:递归组合数源码
- 纯C语言:21根火柴源码
- 英汉字典
- 英汉字典
- 英汉字典
- 纯C语言写的贪吃蛇源码
- 纯C语言:贪心部分背包问题源码
- 纯C语言:贪心Prim算法生成树问题源码
- 纯C语言:贪心Kruskal算法生成树源码
- 一些常见的距离与一些常用的measure
- Linux Kickstart无人值守安装
- 再谈Javascript中function fn(){}和var fn=function(){}
- android应用程序皮肤
- Javascript 对字符串,数组的操作
- 分享纯C语言英汉字典源码
- Google地图.cn与.com的偏移问题
- ORACLE SQL语句优化技术分析
- 工厂模式
- 启动嵌入式Jetty服务器
- Schme详解
- IA32寄存器
- java中String Date Timestamp Calendar 之间的关系及转换
- Vim search