第4章练习题--5--古代密码--2820

替换方法:不管怎样的替换规则,一个字母替换成另一个字母,出现的次数并不会改变;

排列方法:只改变字母出现的顺序,次数也不会改变

所以只需要比较两个字符串中字母的频率排序是不是一样就可以了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int compare(const void * elem1 , const void * elem2)
{
    return (strcmp((char *)elem1, (char *)elem2));
}

int main(int argc, char *argv[])
{
  char s[101],d[101];
  int sp[27],dp[27];
  int i;
  
  for( i = 0 ; i < 26 ; i++ )
      sp[i] = dp[i] = 0 ;
  scanf("%s",d);
  scanf("%s",s);
  for( i = 0 ; d[i]!='\0' ; i++ )
      dp[d[i]-'A']++;
  for( i = 0 ; s[i]!='\0' ; i++ )
      sp[s[i]-'A']++;
  qsort(dp , 26 , sizeof(int) , compare);
  qsort(sp , 26 , sizeof(int) , compare);
  for( i = 0 ; i < 26 ; i++ )
  {
       if( dp[i]!=sp[i] )break;
  }
  if(i==26)printf("YES\n");
  else printf("NO\n");
  
  //system("PAUSE");	
  return 0;
}


你可能感兴趣的:(第4章练习题--5--古代密码--2820)