这道题目不算难,大体意思是:
给你一些单词,无视大小写,无视单词的字母顺序,如果这个单词就出现一次的话,就按字典顺序输出;
做题思路:先输入单词,先把单词中的大写全部转化成小写,然后把单词中的每个字母都排序一遍,然后统计这个单词在全文中的出现次数,如果只出现一次就输出。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
int cmp_char(const void *_a, const void *_b)
{
char *a = (char*)_a;
char *b = (char*)_b;
return *a - *b;
}//对单词中的字母排序
int main()
{
int leap,i,j,leapp,n,k;
int lin[100];//统计单词出现的次数
char str[100][100];//储存原先的单词
char ans[100][100];//储存需要输出的单词
char str1[100][100];//储存处理之后的单词
char ansstr[100],strr[100];
leap=-1;
while(scanf("%s",strr)&&(strr[0]!='#'))
{
leap++;
strcpy(str[leap],strr);
n=strlen(strr);
for(i=0;i<n;i++)
{
if(strr[i]>='A'&&strr[i]<='Z')
str1[leap][i]=strr[i]+'a'-'A';
else
str1[leap][i]=strr[i];
}
str1[leap][n]='\0';
qsort(str1[leap], n, sizeof(char), cmp_char);
}
leap++;
for(i=0;i<leap;i++)
lin[i]=0;
for(i=0;i<leap;i++)
{
for(j=0;j<leap;j++)
{
if(strcmp(str1[i],str1[j])==0)
{
lin[i]++;
}
}
}
leapp=0;
for(i=0;i<leap;i++)
{
if(lin[i]==1)
{
strcpy(ans[leapp],str[i]);
leapp++;
}
}
for(i=0;i<leapp;i++)
{
for(j=0;j<leapp;j++)
{
if(strcmp(ans[i],ans[j])<0)
{
strcpy(ansstr,ans[i]);
strcpy(ans[i],ans[j]);
strcpy(ans[j],ansstr);
}
}
}
for(i=0;i<leapp;i++)
{
printf("%s\n",ans[i]);
}
return 0;
}