您的位置:首页 > 其它

统计一个字符串中出现的最大频率字符;若有频率相同字符,按字典序输出

2014-06-23 11:05 531 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐