首页 > 学院 > 开发设计 > 正文

poj1318

2019-11-10 20:52:41
字体:
来源:转载
供稿:网友

题目大意:

给定一个自定义的字典集,再给出几个单词,通过比较(不区分单词各字母的顺序),若相同,则输出字典集中的对应单词,有多个则输出多个(注意若有多个单词时,按照单词首字母从小到大输出)

解题思路:

用二位数组存放字典集中的各个单词,对于给出单词逐个与字典集中的单词进行比较,在比较的过程中,需要先将字典集的单词先按首字母从小到大排序,并按备份到另一二维数组中。再对字典集中的各单词以及给出的单词,按照字母从小到大分别进行排序,这时,再将给出的单词与排序了的字典集进行比较,若有相同的则记录字典集中该单词的数组下标,并输出该下标在备份数组中对应的单词

代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>char a[102][10];char b[102][10];char c[10];int cmp1(const void *a,const void *b){ return (*(char *)a-*(char *)b);}int cmp2(const void *a,const void *b){ return (strcmp((char*)a,(char*)b));}void PRint(int n){ int i,y=0,k=1; char x[102][10]; for(i=1;i<=n;i++) { if(strcmp(c,b[i])==0) { y=1; strcpy(x[k++],a[i]); } } if(y) { qsort(x+1,k-1,sizeof(x[1]),cmp2); for(i=1;i<=k-1;i++) printf("%s/n",x[i]); } else printf("NOT A VALID Word/n");}int main(){ int i,len,n; for(i=1;;i++) { scanf("%s",a[i]); if(strcmp(a[i],"XXXXXX")==0) break; strcpy(b[i],a[i]); len=strlen(b[i]); qsort(b[i],len,sizeof(b[i][0]),cmp1); } n=i-1; while(scanf("%s",c)!=EOF) { if(strcmp(c,"XXXXXX")==0) break; len=strlen(c); qsort(c,len,sizeof(c[0]),cmp1); Print(n); printf("******/n"); } system("pause"); return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表