纯C风格的代码,运行正确无误。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct Node
{
char zimu;//存储字符
int cnt;//出现个数
int weight;//字母权值
}Zimu,*pZimu;
int PerfectCount(char* s)
{
Zimu ABC[26];
int result=0;
int length=0;
int i=0;
int j=0;
int index=0;
int temp;
for(i=0;i<26;i++)
{
ABC[i].zimu='A'+(char)i;
ABC[i].cnt=0;
ABC[i].weight=0;
}
length=strlen(s);
for(i=0;i<length;i++)
{
if(s[i]>=65&&s[i]<=90)//大写
index=s[i]-'A';
else if(s[i]>=97&&s[i]<=122)//小写
index=s[i]-'a';
ABC[index].cnt++;
}
for(i=0;i<25;i++)
{
for(j=i+1;j<26;j++)
{
if(ABC[i].cnt<ABC[j].cnt)
{
temp=ABC[i].cnt;
ABC[i].cnt=ABC[j].cnt;
ABC[j].cnt=temp;
}
}
}
for(i=0;i<length;i++)
{
ABC[i].weight=(26-i)*ABC[i].cnt;
result+=ABC[i].weight;
}
return result;
}
void main()
{
int Num;//待输入字符串个数
char** str;//用以根据Num动态初始化字符串个数
int i;
scanf("%d\n",&Num);
str=(char**)malloc(Num*sizeof(char*));
for(i=0;i<Num-1;i++)
{
str[i]=(char*)malloc(10000*sizeof(char));
scanf("%s\n",str[i]);
}
str[i]=(char*)malloc(10000*sizeof(char));
scanf("%s",str[i]);
for(i=0;i<Num-1;i++)
{
printf("%d\n",PerfectCount(str[i]));
}
printf("%d",PerfectCount(str[i]));
}