首页 新闻 会员 周边 捐助

用C++统计记事本不同后缀名的文件

0
[待解决问题]

师傅为了培训我,给我分配了一个任务,说要统计记事本中不同后缀名文件的个数,而且记事本中可能出现的后缀名是未知的,请问各位大虾能否指点一二,小弟将不胜感激!

 

记事本数据如下所示:

2001-01-01  01:00    <DIR>          .
2001-01-01  01:00    <DIR>          ..
2001-01-01  02:50            44,687 vmware-0.log
2010-12-27  07:59            71,987 vmware-1.log
2010-12-20  13:36            84,712 vmware-2.log
2001-01-01  02:53            55,726 vmware.log
2001-01-01  02:53        96,141,312 Windows XP Professional-000001.vmdk
2010-12-20  13:20       377,487,360 Windows XP Professional-Snapshot1.vmem
2010-12-20  13:20       136,185,393 Windows XP Professional-Snapshot1.vmsn
2001-01-01  02:53             8,684 Windows XP Professional.nvram
2010-12-20  13:20    10,297,999,360 Windows XP Professional.vmdk
2010-12-20  13:10       377,487,360 Windows XP Professional.vmem
2010-12-20  13:20               464 Windows XP Professional.vmsd
2001-01-01  02:50             2,438 Windows XP Professional.vmx
2010-12-17  13:01               278 Windows XP Professional.vmxf

奇的主页 | 初学一级 | 园豆:200
提问于:2010-12-29 16:37
< >
分享
所有回答(4)
0

C++呢,自学过一丁点儿基础,这样操作文件不会。。。。

我是搞.net的,说说.net里面的东西吧。

.net里面string(字符串类型)有一个lastindexof(char c)就是最后一个你指定的字符的索引,

还有一个substring(int startindex,int length)从startindex处截取length长度的字符串,

还有一个split(char c),把一个字符串分割,比如说aaa,bbb,c传入参数是,那么得到一个字符串数组

aaa  bbb  c

这样子,然后我记得java(还是.net)有hashtabel这个概念,存储的是一个键值对,不能重复,

我想C++中也应该有类似的概念,有了这么多东西,你这个程序应该有思路了吧?

顾晓北 | 园豆:10898 (专家六级) | 2010-12-29 17:54
谢谢,虽然不是很懂
支持(0) 反对(0) | 园豆:200 (初学一级) | 2010-12-30 16:10
就是顺着我的思路,先按“\n"也就是换行split一下,得到的是每条数据。 然后你找到每条数据的“.”所在的索引,然后根据这个索引substring一下,得到的是每条数据的后缀名,你先分组一下,然后得到每个后缀名的个数了。
支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2010-12-30 16:34
0

我认为应该用strchr函数在每行中查“.”,记下.后的字符(后缀),然后统计

ttssrs | 园豆:82 (初学一级) | 2010-12-30 14:58
谢谢,我尝试一下
支持(0) 反对(0) | 园豆:200 (初学一级) | 2010-12-30 16:08
0

其实挺简单的,因为文件后缀是未知的,你需要统计个数,如果你熟悉STL的话,可以用里面的map。(C#里相当于可以用Dictionary),也就是键-值对的数据结构。

获取文件后缀,可以用 fgets 逐个获取文本行。用 strrchr 查找到最后一个小数点,之后就是文件后缀。当然你也可以使用CString和STL里的string。

hoodlum1980 | 园豆:573 (小虾三级) | 2011-02-24 18:16
0

这个真心简单,你该动动脑子的。

const string dir = @"C:\Documents and Settings\";
            System.Collections.Generic.Dictionary<string, int> countdir = new Dictionary<string, int>();
            foreach (var t in System.IO.Directory.GetFiles(dir, "*", System.IO.SearchOption.TopDirectoryOnly))
            {
                var ext=System.IO.Path.GetExtension(t);
                if (!countdir.ContainsKey(ext))
                {
                    countdir.Add(ext, 0);
                }
                countdir[ext]++;
            }

            foreach (var s in countdir)
            {
                System.Console.WriteLine("{0} - {1}", s.Key, s.Value);
            }

荣耀属于跪拜猫 | 园豆:832 (小虾三级) | 2012-07-07 01:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册