#include <stdio.h>
#include <string.h>
/**统计一个字符串中出现的最高频率字符,如果频率相同,按字典序输出*/
/**
*先排序,然后统计
*/
int Partition(char *s, int low, int high)
{
char temp;
temp = s[low];
while(low < high)
{
while(low<high && s[high]>=temp)
--high;
s[low] = s[high];
while(low<high && s[low]<=temp)
++low;
s[high] = s[low];
}
s[low] = temp;
return low;
}
void QuickSortOfString(char *s, int low, int high)
{
int label;
while(low < high)
{
label = Partition(s,low,high);
QuickSortOfString(s,low,label-1);
low = label + 1;
}
}
char MaxFreChar(char *s, int n)
{
if(n >20 || s == NULL)
return 0;
QuickSortOfString(s,0,n-1);
int num[21],status[21],i,j,k;
for(i=0;i<21;i++)
{
num[i] = 0;
status[i] = 1;
}
for(j=0; j<n-1; j++)
{
if(1 == status[j])
{
for(k=j+1; k<n; k++)
{
if(s[j] == s[k])
{
++num[j];
status[k] = 0;
}
}
}
}
int max,index,m;
max = num[0];
//一定要养成定义变量初始化的习惯!
index = 0;
for(m=1; m<21; m++)
{
if(num[m] > max)
{
max = num[m];
index = m;
}
}
return s[index];
}
/**桶排序的统计方法*/
char MaxFreCharTong(char *s, int n)
{
int num[256],i,j,k;
for(i=0; i<256; i++)
{
num[i] = 0;
}
for(j=0;j<n;j++)
++num[s[j]];
int max,index;
max = num[0];
index = 0;
for(k=1;k<256;k++)
{
if(num[k]>max)
{
max = num[k];
index = k;
}
}
return (char)index;
}
int main()
{
char s[21];
gets_s(s);
QuickSortOfString(s, 0, strlen(s)-1);
char maxFreChar;
maxFreChar = MaxFreChar(s,strlen(s));
printf("%c\n",maxFreChar);
puts(s);
getchar();
return 0;
}
统计一个字符串中出现的最大频率字符;若有频率相同字符,按字典序输出
最新推荐文章于 2021-08-16 14:19:34 发布