poj1318

题目大意:

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

解题思路:

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

代码如下:

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值