| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1046 人关注过本帖, 1 人收藏
标题:统计文件中的字符出现频率,并按照频率出现的高低排序<目前还只能处理ansi字 ...
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
if(counter[i].c==0xA)   //\n
{
     printf("\\n  Number of occurrences=%d\n",counter[i].count);

 }
else if (counter[i].c==0x20)  //space
{
     printf("space Number of occurrences=%d\n",counter[i].count);
}
else if ()
{}
这样也可以的,还容易理解


[fly]存在即是合理[/fly]
2013-01-04 22:58
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
对哦,我记得文本文件和二进制文件在读取是有些不同
文本文件把回车键解读为回车和换行两个字符,不过二进制文件好像把它直接视为一个字符

I have not failed completely
2013-01-04 23:00
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
反正WINDOWS的回车和换行是一起出的,有个回车就算也有个换行

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-04 23:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
以下是引用TonyDeng在2012-12-31 17:13:07的发言:

每接收一次按键ch = getch(),先排除它不是编辑键,而且判断ch是普通的字符,那么就用putch(ch)把这个字符输出到屏幕上光标的位置处,如果要变色,就在putch()之前变,变过之后,对以后的输出字符起作用,什么时候要变,就什么时候设。

要输出回车换行,必须输出两个字符!
putch(0x0D);
putch(0x0A);
这是一个两编码字符,亦即所谓的'\n'。这就是前面告诉你,千万不要用'\n'来判断字符的原因。在conio环境中,'\n'是一个被特殊处理的字符,它会随着平台的不同而不同,在Windows中,它往往是'\r'+'\n'(0x0D0A),而在Unix/Linux中,才是'\n'(0x0D)。输出putch(0x0D),仅仅是回车,光标返回行头,但不会跳到下一行,输出putch(0x0A),是仅仅换行,但光标不返回行头,必须两个字符一起输出,才是正常的回车换行动作(顺序无关紧要,可以颠倒,效果是一样的)。如果输出putch('\n'),则系统会根据平台来处理,在Windows下,执行回车换行动作。看到没有,三种是不一样的!这种情况,同样会出现在文件读写处理的'\n'符中,当某个文件要移植到不同的平台下时,这个'\n'往往会引起怪异现象,通常标准库的流读写函数自己检测平台执行转换处理,但如果你要自己处理每一个字节,问题就在这里出现了

不知道这个的人,就总爱用ASCII来取代字符,根本是不怕死的。须知字符就是字符,不是什么整数,人的逻辑区分这是不同的数据类型,不是你学过什么底层之后就可以随便混起来写的,学C就是这一点学坏人,非常不好的习惯。

如果还不知道怎么回事,看看12楼。

fp=fopen("d:\\b.txt","r");

从这句打开文件的语句看,很明显就是根本没这方面的意识。这是"rt"还是"rb"?

[ 本帖最后由 TonyDeng 于 2013-1-4 23:17 编辑 ]

授人以渔,不授人以鱼。
2013-01-04 23:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
fp=fopen("d:\\b.txt","rb");  解决  谢谢各位

[ 本帖最后由 wp231957 于 2013-1-4 23:20 编辑 ]

DO IT YOURSELF !
2013-01-04 23:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
可以用fgetc(),但结果与用rt还是rb打开有关。rt的时候,它实际读了两个字节,但返回一个字符'\n'给你,rb的时候,要你自己处理这两个字节,而且与平台有关(看生成的文件在什么平台下用什么方式生成的)。

授人以渔,不授人以鱼。
2013-01-04 23:20
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
//sort
    int m,n,tmp2,tmp3;
    for(m=0;m<256;m++)
    {
        for(n=m+1;n<256;n++)
        {
            if(counter[m].count>=counter[n].count)
            {
                tmp2=counter[m].count;
                counter[m].count=counter[n].count;
                counter[n].count=tmp2;
                tmp3=counter[m].c;
                counter[m].c=counter[n].c;
                counter[n].c=tmp3;
            }
        }
    }
    //sort end
T版呢,看这个sort 有什么问题没有
网上说  struct 按照一个成员排序就ok了
但是我测试却不行,必须所有成员都要交换滴

DO IT YOURSELF !
2013-01-04 23:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
当然不行,没谁说过struct可以整体赋值。

授人以渔,不授人以鱼。
2013-01-04 23:32
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
收藏
得分:0 
厉害啊,观望。。。

我不知道我能否当程序员,但我依然热爱编程!
2013-01-04 23:35
快速回复:统计文件中的字符出现频率,并按照频率出现的高低排序<目前还只能处理 ...
数据加载中...
 
   



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

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