Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,Unclear和Nuclear、Rimon和MinOR都是Anagrams。编写一个程序,输入两个单词(只包含英文字母),然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。Input:长度不超过80个字符的两个单词,用空格隔开,不考虑字母大小写 (大小写无关)Output: yes或者no
输入:Rimon MinOR
输出:yes
代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 int main(void) 6 { 7 int i,len1,len2; 8 int num[2][100]; //统计单词中字母个数 9 char ch[2][100]; //记录两个单词 10 11 memset(num,0,sizeof(num)); 12 memset(ch,0,sizeof(ch)); 13 14 scanf("%s",ch[0]); 15 scanf("%s",ch[1]); 16 len1 = strlen(ch[0]); 17 len2 = strlen(ch[1]); 18 19 if (len1 != len2) 20 { 21 printf("no"); 22 return 0; 23 } 24 25 for (i=0 ; i<len1 ; i++) 26 { 27 //统计第一个单词中各字母的个数 28 if (ch[0][i]>='a' && ch[0][i]<='z') 29 num[0][ch[0][i]-'a'] ++; 30 else 31 num[0][ch[0][i]-'A'] ++; 32 33 //统计第二个单词中各字母的个数 34 if (ch[1][i]>='a' && ch[1][i]<='z') 35 num[1][ch[1][i]-'a'] ++; 36 else 37 num[1][ch[1][i]-'A'] ++; 38 } 39 40 for (i=0 ; i<len1 ; i++) 41 { 42 if (num[0][i] != num[1][i]) 43 { 44 printf("no"); 45 return 0; 46 } 47 } 48 49 printf("yes"); 50 return 0; 51 }
解题思路:
记录两个单词后,依次对单词中的字母个数做统计,
最后比较两字母,
若出现数量不同的字母,输出"no"
否则输出"yes"