编程珠玑:变位词程序的实现
来源:互联网 发布:手机域名中国不锈钢网 编辑:程序博客网 时间:2024/05/04 13:47
这个程序的实现有助于压缩key的大小,使查找效率更高
1.问题描述
给定一本英语单词词典,请找出所有的变位词集。所谓的变位词是指,组成各个单词的字母完全相同,只是字母排列的顺序不同。
2.解决思路
编程珠玑的变位词程序要按照三个步骤来执行,其中前一个步骤程序的输出作为下一个步骤程序的输入:
第一:程序标识单词,第二:程序排序标识后的文件,第三:程序将这些单词压缩为每个变位词类一行的形式
下面是编程珠玑的举例,仅有6个单词的字典的处理过程
由以上可看出需要三个程序的处理
1).sign程序:假设输入单词的长度不超过100,对每个输入的单词依照字母进行排序,将结果输入这个单词所对应的”签名“
2).sort程序:依照1)程序排序后的输出的“签名”,对其输出的结果排序,如上图.
3).squash程序:将同一个变位词类中的各个单词放到同一行中
3.代码实现
sign程序:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define WORDMAX 100int charcomp(const void *x , const void *y){ return *(char *)x - *(char *)y;}int main(){ char word[WORDMAX], sig[WORDMAX]; while (scanf("%s", word) != EOF) { strcpy(sig, word); qsort(sig, strlen(sig), sizeof(char), charcomp); printf("%s %s\n", sig, word); } return 0;}
sort程序:可以调用系统排序的程序
squash程序:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define WORDMAX 100int main(){ char word[WORDMAX], sig[WORDMAX], oldsig[WORDMAX]; int linenum = 0; strcpy(oldsig, ""); while (scanf("%s %s", sig, word) != EOF) { if (strcmp(oldsig, sig) != 0 && linenum > 0) printf("\n"); strcpy(oldsig, sig); linenum++; printf("%s ", word); } printf("\n"); return 0;}
4.使用命令运行
编程珠玑上面通过下面的命令构建变位此列表
sign < dictionary | sort | squash >gramlist.txt
该命令将文件将文件dictionary输入到程序sign,连接sign的输出到sort,连接sort的输出至squash,并将squash的输出写入文件gramlist。
0 0
- 编程珠玑:变位词程序的实现
- 编程珠玑:变位词程序的实现
- 编程珠玑--第二章变位词程序的实现
- 编程珠玑(二)变位词程序的实现p18
- 变位词--【编程珠玑】
- 编程珠玑变位词算法
- 编程珠玑--变位词问题
- 变位词实现 编程珠玑一处错误
- 变位词程序的实现
- 变位词程序的实现
- 变位词程序的实现
- 编程珠玑第二章变位词1
- 编程珠玑——变位词
- 《编程珠玑》学习总结2-变位词
- [LeetCode] [编程珠玑:变位词]Anagrams
- 《编程珠玑》之变位词查找
- 变位词算法(编程珠玑第二章)
- 编程珠玑中关于一个单词的所有变位词的解决
- [Java](NumberFormat) DecimalFormat
- 技术点汇总(待补充)
- php获取指定月份的第一天开始和最后一天结束的时间戳
- 摘录:关于python动静态与强弱类型的描述
- .NET 页面间传值的几种方法
- 编程珠玑:变位词程序的实现
- 使用 Pitney Bowes 定位服务构建一个简单的图片定位应用程序
- 《费正清:中国回忆录》的读后
- sjtu 1005 数独
- 二分图二•二分图最大匹配之匈牙利算法
- Http协议学习总结
- Hibernate关系映射(六)多对多单向关联@ManyToMany Annotation方式
- Mac 下Versions的 svn无法上传 .a 文件的问题
- jdbc连接数据库