急用,求,C++统计字母的使用频率,程序 就这点分了。。。。

一、题目:统计字母的使用频率(C)二、目的与要求目的:通过编写程序统计字母的使用频率,培养学生综合利用C++语言进行程序设计的能力,熟悉字符串的操作方法,加强函数的运用,... 一、题目:统计字母的使用频率(C)
二、目的与要求
目的:
通过编写程序统计字母的使用频率,培养学生综合利用C++语言进行程序设计的能力,熟悉字符串的操作方法,加强函数的运用,提高程序分析能力和程序文档建立、归纳总结的能力。
基本要求:
1)要求用C++语言编程,在Visual C++环境下调试完成;
2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
3)要求应用本课所讲授的程序设计语言知识来解决问题,使用教材前六章的内容来完成程序;
4)使用cin和cout来实现输入输出(使用scanf和printf的为不合格);
5) 请仔细阅读“课程设计要求”,并按“设计报告模板”完成设计报告。
三、设计方法
问题描述
统计英文字母的使用频率(出现次数),按频率的降序输出字母及其使用频率。
输入一个长度不超过200的字符串,统计26个英文字母的使用频率(其它字符不统计),不区分大小写。最后按使用频率从大到小的顺序输出字母和使用频率(出现的次数),没有出现的字母不输出。
例如输入: sdfhweDFWESDfwesdFWESDDFweadfSDFA
输出为:
D 8
F 7
E 5
S 5
W 5
A 2
H 1
问题的解决方案
按照程序要求,本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
将字符串中的大写字母转换为小写字母(或小写字母转换为大写字母)
统计输入的字符串中字母的使用频率
按使用频率从大到小进行排序
主函数中控制输入、函数调用和输出。
展开
 我来答
沧海雄风2009
2011-09-08 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2826万
展开全部
/////都写得太复杂了 看我的//// 有疑问可追问 满意记得采纳////////////////////////////////
请输入字符串
abBCCCdddd
D 4
C 3
B 2
A 1
Press any key to continue

#include <iostream>
using namespace std;
main()
{
int i,j,tmp,nLen;
char aa[100];
//65 -90 97-122
int count[26][26]={ {65,0},{66,0},{67,0},{68,},{69,0},{70,0},{71,0},
{72,0},{73,0},{74,0},{75,0},{76,0},{77,0},{78,0},
{79,0},{80,0},{81,0},{82,0},{83,0},{84,0},{85,0},
{86,0},{87,0},{88,0},{89,0},{90,0}};
cout<<"请输入字符串"<<endl;
gets(aa);
nLen = strlen(aa);
for (i=0;i<nLen;i++)
for (j=0;j<26;j++)
{
if (aa[i]>='a' && aa[i]<='z')
aa[i]-=32;
if (aa[i]==count[j][0])
count[j][1]++;
}
//冒泡
for (i=0;i<26-1;i++)
for (j=0;j<26-i-1;j++)
if (count[j][1]<count[j+1][1])
{
tmp = count[j][1];
count[j][1] = count[j+1][1];
count[j+1][1]=tmp;
tmp = count[j][0];
count[j][0] = count[j+1][0];
count[j+1][0]=tmp;
}
//输出排序完毕的统计信息
for (i=0;i<26;i++)
if (count[i][1]!=0)
cout<<(char)count[i][0]<<" "<<count[i][1]<<endl;
}
追问
谢谢您,您能把设计思路说一下吗,我要写报告,麻烦您了
追答
用int 二维数组 存储字母的次数情况

第一列 存储 A-Z(如果是小写字母 ,会先转换成大写字母,除大小写字母外其他字符不统计)的 ascii码 (哦 二维数组要改一下 int count[26][26] 改为int count[26][2])

第二列 存储 对应字母出现次数。初始值都为0。

思路 开始接收输入字符串 获得字符串长度 如果是小写字母 先转化为大写字母 ,然后每位与初始二维数组 ascii码位对比(count[i][0]),如果相等 ,则(记录统计次数位count[i][1])自加),大小写字母以外字符不记录。

对记录完毕的二维数组 按照 统计次数进行冒泡排序。交换 统计次数位同时也要交换ascii码位。

最后按从大到小书序循环输出 ascii码位和相应的统计次数 出现次数为0的 不输出
点4869
2011-09-11
知道答主
回答量:18
采纳率:0%
帮助的人:2.9万
展开全部
用数组 吧 指针也可以 本人也是初学 这么多人回答我就不把程序写出来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友30046aa43
2011-09-08
知道答主
回答量:6
采纳率:0%
帮助的人:1.9万
展开全部
去问任何一个学习C++的人就行,基本上任何一个计算机专业,学个一年两年的C或C++的都能写出了。没必要上百度问的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaopeng12342
2011-09-08 · TA获得超过157个赞
知道小有建树答主
回答量:258
采纳率:100%
帮助的人:90.5万
展开全部
你可以这样下手,弄一个二维数组,或者两个一维数组也行,假设是一个二维数组吧。第一维,出书华为A B C D E。。。。对应的ascII码,第二位为0。然后开始统一,注意应该是不区分大小写的。统计完成后,如果第二维对应的数组不为0,说明对应的字母出现过,即可输出。
追问
谢谢您,能写段代码解释一下不,这东西几乎没学,学校让课程设计的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lcyasdlcy
2011-09-08 · TA获得超过867个赞
知道小有建树答主
回答量:542
采纳率:0%
帮助的人:342万
展开全部
#include <iostream>
using namespace std;
struct zimutongji
{
char c;
int n;
}result[26];
char s[200];
void zhuanhuan();
void tongji();
void paixu();
void shuchu();
int main()
{
cout<<"输入字母,200个以内\n";
cin>>s;
zhuanhuan();
tongji();
paixu();
shuchu();
return 0;
}
void zhuanhuan()
{
for (int i=0;i<200;i++)
if (s[i]>='A'&&s[i]<='Z')
s[i]=s[i]+32;
}
void tongji()
{
for (int i=0;i<26;i++)
{
result[i].c='a'+i;
result[i].n=0;
char *p=s;
while(*p)
{
if (*p==result[i].c)
result[i].n++;
p++;
}
}
}
void paixu()
{
zimutongji tmp;
for (int i=0;i<25;i++)
for (int j=i+1;j<26;j++)
if (result[i].n<result[j].n)
{
tmp.c=result[i].c;
tmp.n=result[i].n;
result[i].c=result[j].c;
result[i].n=result[j].n;
result[j].c=tmp.c;
result[j].n=tmp.n;
}
}
void shuchu()
{
for (int i=0;i<26;i++)
if(result[i].n!=0)
cout<<result[i].c<<result[i].n<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式