主题:求助算法
hoker
[专家分:0] 发布于 2003-08-22 18:30:00
输入一个文本 统计各字符出现的频度 输出结果
那位高手能给个详细点的算法
多谢
回复列表 (共2个回复)
沙发
风谷 [专家分:150] 发布于 2003-08-22 23:19:00
具体如下
先计算出文本中总字符的总数,
再求每个字符出现的个数,
两者相除
就是字符的平率了
板凳
lheng [专家分:1490] 发布于 2003-08-23 00:52:00
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
#define size 81
void main(void)
{
void initial(int*); //定义对统计数组初始化子程序
void stata_z(char*, int, int*); //定义统计字母出现次数的子程序
void output(int*); //定义输出结果子程序
char text[size];
int count[26];
initial(count); //调用统计数组初始化子程序
while (gets(text) != NULL)
stata_z(text, strlen(text), count); //调用统计子程序
output(count); //调用输出子程序
}
/*************子程序initial()***********************/
void initial(int *letter)
{
for (int i = 0; i < 26; i++)
*(letter+i) = 0;
}
/************子程序stata_z()************************/
void stata_z(char *array, int len, int *letter)
{
char ch;
int sub;
for (int i = 0; i < len; i++) {
ch = toupper(*(array+i)); //如果这个字符是字母,将它转换成大写
if(ch >= 'A' && ch <= 'Z') {//这个字符是字母
sub = (int)ch-65; //将字母的ASCII值减65,转换成0到26的下标值
letter[sub] += 1;
}
}
}
/***********子程序output()****************************/
void output(int *letter)
{
puts("统计结果为:");
for (int i = 0; i < 26; i++)
cout << (char)(i+65) << ", or" << (char)(i+97) << " : "
<< *(letter+i) << endl;
}
我来回复