回 帖 发 新 帖 刷新版面

主题:求助算法

输入一个文本 统计各字符出现的频度 输出结果

那位高手能给个详细点的算法

多谢

回复列表 (共2个回复)

沙发

具体如下
先计算出文本中总字符的总数,
再求每个字符出现的个数,
两者相除
就是字符的平率了

板凳

#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;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册