博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程珠玑:变位词程序的实现
阅读量:7247 次
发布时间:2019-06-29

本文共 1450 字,大约阅读时间需要 4 分钟。

这个程序的实现有助于压缩key的大小,使查找效率更高

1.问题描述

     给定一本英语单词词典,请找出所有的变位词集。所谓的变位词是指,组成各个单词的字母完全相同,只是字母排列的顺序不同。

 

 

2.解决思路

编程珠玑的变位词程序要按照三个步骤来执行,其中前一个步骤程序的输出作为下一个步骤程序的输入:

第一:程序标识单词,第二:程序排序标识后的文件,第三:程序将这些单词压缩为每个变位词类一行的形式

下面是编程珠玑的举例,仅有6个单词的字典的处理过程

由以上可看出需要三个程序的处理

1).sign程序:假设输入单词的长度不超过100,对每个输入的单词依照字母进行排序,将结果输入这个单词所对应的”签名“

2).sort程序:依照1)程序排序后的输出的“签名”,对其输出的结果排序,如上图.

3).squash程序:将同一个变位词类中的各个单词放到同一行中

 

3.代码实现

 sign程序:

#include 
#include
#include
#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 
#include
#include
#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。

 

 

 

 

 

 

 

 

 

转载地址:http://lejbm.baihongyu.com/

你可能感兴趣的文章
Java中的随机类Random
查看>>
浅析计算机的原理(一)
查看>>
jmc、jcmd和jfr介绍
查看>>
利用LVM增加根分区大小
查看>>
kafka 文档 (一)
查看>>
zookeeper学习之zkclient事件监听<十>
查看>>
【笔记】如何做好一场技术演讲——观点烙刻
查看>>
Laravel学习一
查看>>
快速搭建discuz论坛系统
查看>>
分享50张非常精美的Apple主题桌面壁纸(下篇)
查看>>
修改mysql5.7.16的密码
查看>>
923A - 你应该看的书
查看>>
storyboard强大利器
查看>>
LAMP论坛搭建
查看>>
我的梦里
查看>>
js中cookie存储以后产生乱码
查看>>
Domino9.0.1FP3下的LDAP、Kerbors详细配置介绍及证书申请颁发
查看>>
HTML5移动游戏平台大战,技术不再主导流量
查看>>
详述Linux配置静态IP、设置DNS和主机名
查看>>
第12课:Spark Streaming源码解读之Executor容错安全性
查看>>