C语言问题,求大神帮助解决,最好基于我自己写的程序
【问题描述】编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。【输入形式】在标准输入上输入一段英文文章(可能有一行,也可能有多行...
【问题描述】编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。【输入形式】在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表示结束。【输出形式】在屏幕上依次输出表示每个小写字母出现次数的柱状图(以“*”字符表示柱状图,空白处用空格字符表示,某个小写字母出现多少次,就显示多少“*”字符;柱状图的高度以出现最多的字母次数为准),在最后一行依次输出26个小写字母。【样例输入】The computing world has undergone a revolution since the publication ofThe C Programming Language in 1978.【样例说明】在输入的英文短文中,小写字母a出现了6次,所以其上输出了6个字符"*"。出现次数最多的是字母n,所以柱状图的高度为9个字符。字母j没有出现,所以其上都为空格字符。
#include<stdio.h>
#include<string.h>
int main()
{
char c,a[1024];
int max,i=0,j=0;
int b[26]={0};
while(c=getchar()!=EOF){
if(c>='a'&&c<='z'){
a[i]=c;
i++;
}
}
a[i]='\0';
i=0;
c='a';
while(j<26){ //b数组储存二十六个字母出现的次数
if(a[i]==c){
b[j]=b[j]+1;
i++;
}
else if(a[i]=='\0')
i=0,j++,c++;
else
i++;
}
i=0,j=1;
while(j<26){ //判断数量最多的字母
if(b[i]>b[j])
j++;
else{
i=j;
j++;
}
max=b[i];
}
i=0,j=0;
while(j<26){
if(b[i]==max){
printf("*");
b[i]-=1;
}
else
printf(" ");
i++;
if(i==26){
printf("\n");
i=0;
j++;
}
}
printf("abcdefghijklmnopqrstuvwxyz\n");
return 0;
} 展开
#include<stdio.h>
#include<string.h>
int main()
{
char c,a[1024];
int max,i=0,j=0;
int b[26]={0};
while(c=getchar()!=EOF){
if(c>='a'&&c<='z'){
a[i]=c;
i++;
}
}
a[i]='\0';
i=0;
c='a';
while(j<26){ //b数组储存二十六个字母出现的次数
if(a[i]==c){
b[j]=b[j]+1;
i++;
}
else if(a[i]=='\0')
i=0,j++,c++;
else
i++;
}
i=0,j=1;
while(j<26){ //判断数量最多的字母
if(b[i]>b[j])
j++;
else{
i=j;
j++;
}
max=b[i];
}
i=0,j=0;
while(j<26){
if(b[i]==max){
printf("*");
b[i]-=1;
}
else
printf(" ");
i++;
if(i==26){
printf("\n");
i=0;
j++;
}
}
printf("abcdefghijklmnopqrstuvwxyz\n");
return 0;
} 展开
展开全部
只会自己编写。。
#include<stdio.h>
main()
{
char a[100];
int b[26]={0};
char c[10][26];
int i,j;
gets(a);
for(i=0;i<10;i++)
for(j=0;j<26;j++)
c[i][j]=' ';
for(i=0;a[i]!='\0';i++)
b[a[i]-'a']++;
for(j=0;j<26;j++)
for(i=0;i<=b[j];i++)
c[10-i][j]='*';
for(i=0;i<10;i++)
{
for(j=0;j<26;j++)
printf("%c",c[i][j]);
printf("\n");
}
printf("abcdefghijklmnopqrstuvwxyz\n");
}
#include<stdio.h>
main()
{
char a[100];
int b[26]={0};
char c[10][26];
int i,j;
gets(a);
for(i=0;i<10;i++)
for(j=0;j<26;j++)
c[i][j]=' ';
for(i=0;a[i]!='\0';i++)
b[a[i]-'a']++;
for(j=0;j<26;j++)
for(i=0;i<=b[j];i++)
c[10-i][j]='*';
for(i=0;i<10;i++)
{
for(j=0;j<26;j++)
printf("%c",c[i][j]);
printf("\n");
}
printf("abcdefghijklmnopqrstuvwxyz\n");
}
追问
你这个不对的。。。。。。跟题要求不一样。。而且输出的东西也不对。。
追答
这是思路阿 大致算法都差不多 输入和输出改改不就行了 我相信你写出这么长的程序也不是一点都不会吧..........
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你想问什么
追问
我想问我的程序哪里出问题了
追答
int input(int count[]) \\统计输入的各字符个数
{
char c;
int max=0;
while((c=getchar())!='\n')
{
count[c-'a']++;
if(count[c-'a']>max)
{
max=count[c-'a'];
}
}
return max;
}
void display(int max,int count[]) \\输出条形图
{
int i,j;
for(i=max;i>0;i--)
{
for(j=0;j=i)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
printf("abcdefghijklmnopqrstuvwxyz\n");
}
void main()
{
int count[26]={0};
int max=0;
max=input(count);
display(max,count);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询