用C++实现统计字母的使用频率

一、题目:统计字母的使用频率(20题)二、目的与要求1.目的:通过编写程序统计字母的使用频率,培养学生综合利用C++语言进行程序设计的能力,熟悉字符串的操作方法,加强函数... 一、题目:统计字母的使用频率(20题)
二、目的与要求
1. 目的:
通过编写程序统计字母的使用频率,培养学生综合利用C++语言进行程序设计的能力,熟悉字符串的操作方法,加强函数的运用,提高软件系统分析能力和程序文档建立、归纳总结的能力。
2. 基本要求:
1)要求用C++语言编程,在Visual C++环境下调试完成;
2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
3)要求应用本课所讲授的程序设计语言知识来解决问题,使用教材前六章的内容来完成程序;
4)使用cin和cout来实现输入输出(使用scanf和printf的为不合格)。
三、设计方法和基本原理
1. 课题功能描述
本程序的功能,就是要统计英文字母的使用频率。
2. 问题详细描述
为统计英文字母的使用频率,输入一个不包括空格的由英文字母组成的字符串,长度不超过200个字符。统计26个英文字母的使用频率,不区分大小写。最后按使用频率从大到小输出字母(小写字母)和使用频率(出现的次数),没有出现的字母不输出。
3. 问题的解决方案
按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
 将字符串中的大写字母转换为小写字母
 统计输入的字符串中字母的使用频率
 按使用频率从大到小进行排序
主函数中控制输入、函数调用和输出。
展开
 我来答
xiangjuan314
2016-03-03 · TA获得超过3.3万个赞
知道大有可为答主
回答量:2.9万
采纳率:0%
帮助的人:2762万
展开全部

计算机中一个字符只占一个字节,有效的字符个数最多不超过128个,因此,可以定义一个128位的数组来存储不同字符的出现次数,用数组下标来表示相应的字符。

参考代码:

martinblack954
推荐于2017-11-24 · TA获得超过1490个赞
知道小有建树答主
回答量:591
采纳率:0%
帮助的人:234万
展开全部
#include<stdio.h>
#include <iostream>
#include<string.h>
using namespace std;
#define M 1000

struct letter
{
char c;
int num;
}all[26];

char s[M];

void tolow()//转小写
{
int i,j,l;
l=strlen(s);
for(i=0;i<l;i++)
{
if(s[i]>='A'&&s[i]<='Z')
s[i]+=32;//ASCII码转换
}
}

void calnum()//统计每个字母数目
{
int i,j,l;
l=strlen(s);
for(i=0;i<26;i++)
{
all[i].c='a'+i;
all[i].num=0;
}
for(i=0;i<l;i++)
{
if(s[i]>='a'&&s[i]<='z')//字母的话就统计
{
all[s[i]-'a'].num++;//相应位置
}
}
}

void sortit()//冒泡排序
{
int i,j;
letter x;
bool f=1;
while(f)
{
f=0;
for(i=0;i<25;i++)
{
if(all[i].num<all[i+1].num)
{
x=all[i];
all[i]=all[i+1];
all[i+1]=x;
f=1;
}
}
}
}

void main()
{
int i,j;
while(1)
{
cin>>s;
tolow();
cout<<s<<endl;
calnum();
sortit();
for(i=0;i<26;i++)
{
printf("%c %d\n",all[i].c,all[i].num);
}
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kissofblueice
2011-06-23 · TA获得超过471个赞
知道小有建树答主
回答量:814
采纳率:100%
帮助的人:576万
展开全部
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <string>

using namespace std;
struct No
{
char C;
int no;
};

void fun(char *str,No *a)
{
char *temp = str;
while(*temp!='\0')
{
if(*temp == 'a'||*temp =='A')a[0].no++;
if(*temp == 'b'||*temp =='B')a[1].no++;
if(*temp == 'c'||*temp =='C')a[2].no++;
if(*temp == 'd'||*temp =='D')a[3].no++;
if(*temp == 'e'||*temp =='E')a[4].no++;
if(*temp == 'f'||*temp =='F')a[5].no++;
if(*temp == 'g'||*temp =='G')a[6].no++;
if(*temp == 'h'||*temp =='H')a[7].no++;
if(*temp == 'i'||*temp =='I')a[8].no++;
if(*temp == 'j'||*temp =='J')a[9].no++;
if(*temp == 'k'||*temp =='K')a[10].no++;
if(*temp == 'l'||*temp =='L')a[11].no++;
if(*temp == 'm'||*temp =='M')a[12].no++;
if(*temp == 'n'||*temp =='N')a[13].no++;
if(*temp == 'o'||*temp =='O')a[14].no++;
if(*temp == 'p'||*temp =='P')a[15].no++;
if(*temp == 'q'||*temp =='Q')a[16].no++;
if(*temp == 'r'||*temp =='R')a[17].no++;
if(*temp == 's'||*temp =='S')a[18].no++;
if(*temp == 't'||*temp =='T')a[19].no++;
if(*temp == 'u'||*temp =='U')a[20].no++;
if(*temp == 'v'||*temp =='V')a[21].no++;
if(*temp == 'w'||*temp =='W')a[22].no++;
if(*temp == 'x'||*temp =='X')a[23].no++;
if(*temp == 'y'||*temp =='Y')a[24].no++;
if(*temp == 'z'||*temp =='Z')a[25].no++;
temp++;

}

}

void SorcChar(No *p)
{
No *pTemp = p;
No *pMax = p;
No Temp;
for(int i=0;i<26;i++)
{
pTemp = &p[i];
pMax = &p[i];
for(int j=i;j<26;j++)
{
if(pTemp->no > pMax->no)
{
pMax = pTemp;
}
pTemp++;
}
memcpy(&Temp,&p[i],sizeof(No));
memcpy(&p[i],pMax,sizeof(No));
memcpy(pMax,&Temp,sizeof(No));
}
}
void Display(No *p)
{
for(int i=0;i<26;i++)
{
if(p[i].no == 0)
break;
printf("%c使用次数%d\n",p[i].C,p[i].no);
}
}

int _tmain(int argc, _TCHAR* argv[])
{
char p[200];No a[26];
memset(a,0,sizeof(No)*26);
char c='a';
for(int i=0;i<26;i++)
{
a[i].C = c;
c++;
}

scanf("%s",p);

fun(p,a);
SorcChar(a);
Display(a);
system("Pause");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式