uva- 156-Ananagrams

这道题目不算难,大体意思是:
给你一些单词,无视大小写,无视单词的字母顺序,如果这个单词就出现一次的话,就按字典顺序输出;
做题思路:先输入单词,先把单词中的大写全部转化成小写,然后把单词中的每个字母都排序一遍,然后统计这个单词在全文中的出现次数,如果只出现一次就输出。

#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;
}

 

你可能感兴趣的:(ini)