题目大意:把每个单词全部转化成小写字母,对每个单词,看它的字母重排后得到的单词在所有输入的单词中是否出现过,若没有出现,就输出原单词。所有要输出的单词按字典序排列输出。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct _s
{
char a[25];
char b[25];
bool flag ;
}s[10000];
void trans(char *st)
{
int len = strlen(st);
for (int i = 0 ; i < len ; i++)
if (st[i] >= 'A' && st[i] <= 'Z')
st[i] += 32;
for (int i = len ; i > 0 ; i--)
{
for (int j = 0 ; j < i ; j++)
if (st[j] < st[j-1])
{
char tmp = st[j];
st[j] = st[j-1];
st[j-1] = tmp ;
}
}
}
int cmp_b(const void *_a,const void *_b)
{
struct _s *a = (struct _s*) _a;
struct _s *b = (struct _s*) _b;
return strcmp(a->b,b->b);
}
int cmp_a(const void *_a, const void *_b)
{
struct _s *a = (struct _s*)_a;
struct _s *b = (struct _s*)_b;
return strcmp(a->a, b->a);
}
int main()
{
char st[25];
int n = 0 ;
while (scanf("%s",st) != EOF )
{
if (st[0] == '#')
break;
strcpy(s[n].a,st);
trans(st);
strcpy(s[n].b,st);
n++;
}
qsort(s,n,sizeof(s[0]),cmp_b);
for (int i = 1 ; i < n ; i++ )
if ( strcmp(s[i].b,s[i-1].b)==0 )
s[i].flag = s[i-1].flag = 1;
qsort(s,n,sizeof(s[0]),cmp_a);
for (int i = 0 ; i < n ; i++)
if ( !s[i].flag )
printf("%s\n",s[i].a);
return 0 ;
}