| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:c语言 统计由文件打开一篇文章的字母和空格的个数和频率
只看楼主 加入收藏
jh97066524
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-9-6
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
c语言 统计由文件打开一篇文章的字母和空格的个数和频率
#include<stdio.h>
#include<stdlib.h>
void main()
{   FILE *fp;
    char c[10000000000000];
    int letter[27];
    float rate[27];
        int i,j,k;
    float len=0;
    int temp=0;
    if((fp=fopen("wenzhang.txt","r"))==NULL)
    {    printf("can not open\n");
         exit(0);
    }
    fscanf(fp,"%c",c);
    for(k=0;k<=26;k++)
       {
            letter[k]=0;            
        }
    while(c[i]!=EOF)
    {    len++;}
        for(i=0;i<=len;i++)
          {
            if (c[i] == ' '){
                 letter[0]++;
            }
            if (c[i] == 'A' ||c[i] =='a'){
                letter[1]++;               
            }
            if (c[i] == 'B' ||c[i] =='b'){
                letter[2]++;               
            }
            if (c[i] == 'C' ||c[i] =='c'){
                letter[3]++;               
            }
            if (c[i] == 'D' ||c[i] =='d'){
                letter[4]++;               
            }
            if (c[i] == 'E' ||c[i] =='e'){
                letter[5]++;               
            }
            if (c[i] == 'F' ||c[i] =='f'){
                letter[6]++;               
            }
            if (c[i] == 'G' ||c[i] =='g'){
                letter[7]++;               
            }
            
            if (c[i] == 'H' ||c[i] =='h'){
                letter[8]++;               
            }
            if (c[i] == 'I' ||c[i] =='i'){
                letter[9]++;               
            }
            if (c[i] == 'J' ||c[i] =='j'){
                letter[10]++;               
            }
            if (c[i] == 'K' ||c[i] =='k'){
                letter[11]++;               
            }
            if (c[i] == 'L' ||c[i] =='l'){
                letter[12]++;               
            }
            if (c[i] == 'M' ||c[i] =='m'){
                letter[13]++;               
            }
            if (c[i] == 'N' ||c[i] =='n'){
                letter[14]++;               
            }
            if (c[i] == 'O' ||c[i] =='o'){
                letter[15]++;               
            }
            if (c[i] == 'P' ||c[i] =='p'){
                letter[16]++;               
            }
            if (c[i] == 'Q' ||c[i] =='q'){
                letter[17]++;               
            }
            if (c[i] == 'R' ||c[i] =='r'){
                letter[18]++;               
            }
            if (c[i] == 'S' ||c[i] =='s'){
                letter[19]++;               
            }
            if (c[i] == 'T' ||c[i] =='t'){
                letter[20]++;               
            }
            if (c[i] == 'U' ||c[i] =='u'){
                letter[21]++;               
            }if (c[i] == 'V' ||c[i] =='v'){
                letter[22]++;               
            }
            if (c[i] == 'W' ||c[i] =='w'){
                letter[23]++;               
            }
            if (c[i] == 'X' ||c[i] =='x'){
                letter[24]++;               
            }if (c[i] == 'Y' ||c[i] =='y'){
                letter[25]++;               
            }if (c[i] == 'Z' ||c[i] =='z'){
                letter[26]++;               
            }
                  
             }
        
        for(j=0;j<=26;j++){
            rate[j] = letter[j]/len;            
        }
        fclose(fp);
printf("空格的数量:%d,占全文字符的频率为:%lf\n",letter[0],rate[0]);
printf("A的数量:%d,占全文字符的频率为:%lf\n",letter[1],rate[1]);
printf("B的数量:%d,占全文字符的频率为:%lf\n",letter[2],rate[2]);
printf("C的数量:%d,占全文字符的频率为:%lf\n",letter[3],rate[3]);
printf("D的数量:%d,占全文字符的频率为:%lf\n",letter[4],rate[4]);
printf("E的数量:%d,占全文字符的频率为:%lf\n",letter[5],rate[5]);
printf("F的数量:%d,占全文字符的频率为:%lf\n",letter[6],rate[6]);
printf("G的数量:%d,占全文字符的频率为:%lf\n",letter[7],rate[7]);
printf("H的数量:%d,占全文字符的频率为:%lf\n",letter[8],rate[8]);
printf("I的数量:%d,占全文字符的频率为:%lf\n",letter[9],rate[9]);
printf("J的数量:%d,占全文字符的频率为:%lf\n",letter[10],rate[10]);
printf("K的数量:%d,占全文字符的频率为:%lf\n",letter[11],rate[11]);
printf("L的数量:%d,占全文字符的频率为:%lf\n",letter[12],rate[12]);
printf("M的数量:%d,占全文字符的频率为:%lf\n",letter[13],rate[13]);
printf("N的数量:%d,占全文字符的频率为:%lf\n",letter[14],rate[14]);
printf("O的数量:%d,占全文字符的频率为:%lf\n",letter[15],rate[15]);
printf("P的数量:%d,占全文字符的频率为:%lf\n",letter[16],rate[16]);
printf("Q的数量:%d,占全文字符的频率为:%lf\n",letter[17],rate[17]);
printf("L的数量:%d,占全文字符的频率为:%lf\n",letter[18],rate[18]);
printf("S的数量:%d,占全文字符的频率为:%lf\n",letter[19],rate[19]);
printf("T的数量:%d,占全文字符的频率为:%lf\n",letter[20],rate[20]);
printf("U的数量:%d,占全文字符的频率为:%lf\n",letter[21],rate[21]);
printf("V的数量:%d,占全文字符的频率为:%lf\n",letter[22],rate[22]);
printf("W的数量:%d,占全文字符的频率为:%lf\n",letter[23],rate[23]);
printf("X的数量:%d,占全文字符的频率为:%lf\n",letter[24],rate[24]);
printf("Y的数量:%d,占全文字符的频率为:%lf\n",letter[25],rate[25]);
printf("Z的数量:%d,占全文字符的频率为:%lf\n",letter[26],rate[26]);
    /*printf("%lf",len);*/
}




为什么不能显示???求大神解答  谢谢了  在线等
2015-09-06 21:15
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:4 
程序代码:
    while(c[i]!=EOF)
    {    len++;}
        for(i=0;i<=len;i++)
        {
            if (c[i] == ' '){
                 letter[0]++;
            }
            else if(c[i]<97) 
            {
                letter[c[i]-97]++;
            }
            else
                 letter[c[i]-65]++; 
        }
        for(j=0;j<=26;j++){
            rate[j] = letter[j]/len;            
        }
        fclose(fp);
printf("空格的数量:%d,占全文字符的频率为:%lf\n",letter[0],rate[0]);
for(int i=0;i<26;i++)
{
    printf("%c的数量:%d,占全文字符的频率为:%lf\n",65+i,letter[i+1],rate[i+1]);
}

太长改了下,可能路径问题吧

剑栈风樯各苦辛,别时冰雪到时春
2015-09-06 21:26
jh97066524
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-9-6
收藏
得分:0 
回复 2楼 林月儿
图片附件: 游客没有浏览图片的权限,请 登录注册



问下为什么显示不出来呢?
会不会是这里有问题
  while(c[i]!=EOF)
    {    len++;}

或者
 fscanf(fp,"%c",c);
2015-09-06 21:39
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
回复 楼主 jh97066524
你都这样做了,还干嘛要写程序?手工统计算了。

能编个毛线衣吗?
2015-09-06 21:46
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:4 
char c[10000000000000];
数组太大了
2015-09-06 21:47
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
没有必要用数组把文件全存起来,从文件取出字符后直接判断统计就可以了
2015-09-06 21:52
jh97066524
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-9-6
收藏
得分:0 
回复 4楼 wmf2014
新手....
2015-09-06 21:56
xiaozi2013
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:四川成都
等 级:蒙面侠
威 望:6
帖 子:830
专家分:4331
注 册:2013-12-13
收藏
得分:4 
要不要初始化数组

:好久没玩C语言了

--整天敲那些破代码能找着媳妇儿吗。。。---
2015-09-07 07:47
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:0 
编程和我们做事的道理是相通的,复杂的事情分成几块或几步,就会简单些,编程时把问题分成几个小问题,解决起来就会简单,以此题为例,可分成几个小问题,文件打开关闭,读取字符,判断字符,统计字符,保存统计结果,显示结果等等,还可以先实现一部分功能,再进行扩展,比如,先只统计空格,完成之后再增加统计其他字符的功能。
楼主的代码中,字符数组是完全无用的,我们要的是字符的个数,字符本身比较完之后就没有用了,你保存它干嘛,编程要符合道理,这些道理是要经常去思考的,好的代码最基本的东西就是程序要符合道理。
2015-09-07 16:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
很勤快,不厌其烦地敲键盘。

授人以渔,不授人以鱼。
2015-09-07 19:01
快速回复:c语言 统计由文件打开一篇文章的字母和空格的个数和频率
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025933 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved