uva 10815

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100+10


typedef struct word{
    char* w;
    struct word * l;
}Word;

Word* dic[26];
char buf[5000][200];


int insert(char* p)
{
    int inx = (*p) - 'a';
    if(dic[inx] == NULL)
    {
        dic[inx] = (Word*)malloc(sizeof(Word));
        dic[inx]->w = p;
        dic[inx]->l = NULL;
    }
    else
    {
        Word* q = dic[inx];
        Word* pre, *tmp;
        pre = NULL;
        tmp = NULL;
        while(q && (strcmp(q->w, p) <= 0))
            {pre = q;   q = q->l;}
        if(pre == NULL)         //should be inserted before the first elem
        {
            tmp = (Word*)malloc(sizeof(Word));
            tmp->w = p;
            tmp->l = q;
           dic[inx] = tmp;
        }
        else if(strcmp(pre->w, p) )
        {
            tmp = (Word*)malloc(sizeof(Word));
            tmp->w = p;
            tmp->l = pre->l;
            pre->l = tmp;
        }

    }
    return 0;
}

int main()
{
//    char buf[MAX];
    for(int i = 0; i < 26; i++)
        dic[i] = NULL;
    int j = 0;
    while(fgets(buf[j],MAX,stdin))
    {
        int dis = 'A'-'a';
        int i = 0, flag = 0;;
        char * p= NULL;
        while(buf[j][i])
        {
            if(buf[j][i]>='A' && buf[j][i]<='Z')
            {
                if(flag == 0){
                    p = &(buf[j][i]);
                    flag = 1;
                }
                buf[j][i] = buf[j][i] - dis;
            }
            else if(buf[j][i]<'a' || buf[j][i] > 'z')
            {
                if(flag == 1)
                {
                    flag  =0;
                    buf[j][i] = '\0';
                    insert(p);
                }
                else
                    buf[j][i] = '\0';
            }
            else{
                if(flag == 0) {
                    p = &(buf[j][i]);
                    flag = 1;
                }
            }
            i++;
        }

    j++;
    }

    Word* q = NULL;
    for(int i = 0; i < 26; i++)
    {
        q = dic[i];
        while(q)
        {
            printf("%s\n", q->w);
            q = q->l;
        }
    }
    return 0;

}

  

posted @ 2013-07-24 21:24  zhengguan  阅读(233)  评论(0)    收藏  举报