当前位置: 代码迷 >> C语言 >> 求救
  详细解决方案

求救

热度:79   发布时间:2007-12-06 08:16:01.0
求救
统计字母的使用频率

1将字符串中的大写字母转换为小写字母 2统计输入的字符串中字母的使用频率 3按使用频率从大到小进行排序 主函数中控制输入、函数调用和输出。
谢谢了
----------------解决方案--------------------------------------------------------
第一,大换小有专门的函数,或者直接用ASCII码转换
第二,字母频率也可以用这个解决
第三,频率建议用数组排列
----------------解决方案--------------------------------------------------------
我想要确切的程序啊。救命啊
----------------解决方案--------------------------------------------------------
晕,这个谁会帮你写啊
我在上班哎
你写了我帮你改
----------------解决方案--------------------------------------------------------
非常感谢!
----------------解决方案--------------------------------------------------------
帮我运行一下,看错在哪儿。麻烦了。
#include<stdio.h>
void main()
{
void comp(char *s);
void num(char *str,int a[]);
void turn(int a[],char *s);
char str[200],*s="abcdefghijklmnopqrstuvwxyz";
int a[25];
int i;
printf("please input words");
gets(str);
comp(str);
num(str,a);
turn(a,s);
for(i=0;i<26;i++)
printf("%c%d",*(s+i),a[i]);
}
void comp(char *str)
{
int i;
for(i=0;i<200;i++)
if(*(str+i)>='A'&&*(str+i)<='Z')
  *(str+i)+=32;
}
void num(char *str,int a[])
{
int i,j;
a[0]=0;
for(j=0;j<26;j++)
for(i=0;i<200;i++)
  if(*(str+i)-j==97) (*(a+j))++;//daixiugai
}
void turn(int a[],char *s)
{
   int i,j,m;
   char n;
for(i=0;i<25;i++)
for(j=0;j<25-i;j++)
   if(*(a+j)<*(a+j+1))
   {m=*(a+j);
   *(a+j)=*(a+j+1);
   *(a+j+1)=m;
   n=*(s+j);
   *(s+j)=*(s+j+1);
   *(s+j+1)=n;}
   }
----------------解决方案--------------------------------------------------------
这个程序我用VC运行出错哎
可能是内存出了问题了
还有 if(*(str+i)-j==97) (*(a+j))++;//daixiugai 我不是很理解
请斑竹们出来解决
----------------解决方案--------------------------------------------------------
  相关解决方案