我的这个字母使用频率的程序哪错了 求答案
#include <iostream>using namespace std;
int a(int * r , char * str); //统计
void b(int * r , char * str, int l ); //显示, 可设置升序/降序
void c(int * r , int l )
{
cout<<"l="<<l <<endl;
cout<<"使用频率表:"<<endl;
for(int i=0;i<26; i++)
cout<<char('A'+i)<<":"<<r [i]<<endl;
}
void main()
{
cout<<"输入:";
char str[201];
cin>>str;
int r [26]; //统计26个字母出现频率 & initiate
int l =a(r ,str); //串长度(不含\0)
cout<<"已排序字符串: ";
b(r ,str,l );
c(r ,l );
}
int a(int * r , char * str)
{
int l =0;
for(int i=0;i<26;++i)
r [i]=0; for(i=0;str[i]!=0;++i)
{
//判断是否字母
//大写
if(str[i]>='A'&&str[i]<='Z')
//yes
r[(str[i]-'A')]++; //指定字母频率表(出现次数)+1
//小写
if(str[i]>='a'&&str[i]<='z')
r[(str[i]-'a')]++; //同上
//后续操作
l++ ; //统计长度
}
return l ;
}
void b(int * r ,char * str, int l )
{
int t [26]; //临时, 存放已排序字母频率
for(int i=0;i<26;++i)
t [i]=0;
int s ; //操作寄存器
for(i=26;i>0; i--)
{
s =0;
for(int j=0;j<i; j++)
{
//获取目前最大的频率
if(r[s ]<r[j])
s =j;
}
if(r [s ]!=0)
{
//得到当前最大频率r [s ]
//显示该字母
for(j=0;j<l ; j++)
{
if(str[j]>='A'&&str[j]<='Z')
{
if(str[j]=='A'+s )
cout<<str[j];
}
if(str[j]>='a'&&str[j]<='z')
{
if(str[j]=='a'+s )
cout<<str[j];
}
}
}
r[s]=0;
}
cout<<endl;
}