POJ1318

问题描述:给定一个自定义的字典集,再给出几个单词,通过比较(不区分单词各字母的顺序),若相同,则输出字典集中的对应单词,有多个则输出多个(注意若有多个单词时,按照单词首字母从小到大输出)
解题思路:用二位数组存放字典集中的各个单词,对于给出单词逐个与字典集中的单词进行比较,在比较的过程中,需要先将字典集的单词先按首字母从小到大排序,并按备份到另一二维数组中。再对字典集中的各单词以及给出的单词,按照字母从小到大分别进行排序,这时,再将给出的单词与排序了的字典集进行比较,若有相同的则记录字典集中该单词的数组下标,并输出该下标在备份数组中对应的单词。
code(C)

#include<stdio.h>
#include<string.h>
char w[105][10];//字典序
char s[105][10];
char a[10];//输入单词
int x;      //x表示字典序中的总单词个数

void sort(char *s){
    char t;
    int i,j;
    int l=strlen(s);
    for(i=0;i<l-1;i++)
        for(j=i+1;j<l;j++)
        if(s[i]>s[j])
            {t=s[i]; s[i]=s[j]; s[j]=t;}
}

void readdate(){
    int n;
    for(n=0;n<110;n++){
        gets(w[n]);
        if(!strcmp(w[n],"XXXXXX")){
            x=n;    
            break;
        }
    }
}

int main()
{

    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int i;
    readdate();
    for(i=0;i<x-1;i++){
        for(int j=i+1;j<x;j++){
            if(strcmp(w[i],w[j])==1){
                char b[10];
                strcpy(b,w[i]);
                strcpy(w[i],w[j]);
                strcpy(w[j],b);
            }
        }
    }
    for(i=0;i<x;i++)
        strcpy(s[i],w[i]);
    for(i=0;i<x;i++)
        sort(w[i]);
    while(1)
    {
        memset(a,'\0',10);
        scanf("%s",a);
        if(strcmp(a,"XXXXXX")==0)
            return 0;
        sort(a);
        int flag=1;
        for(i=0;i<x;i++){
            if(!strcmp(a,w[i])){
                flag=0;
                puts(s[i]);
            }

        }
        if(flag)
            printf("NOT A VALID WORD\n");
        printf("******\n");
    }
    //fclose(stdin);
    //fclose(stdout);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值