统计单词个数
大家好,我刚学UNIX,有个问题,前提是 有五个目录,每个目录下至少有一个文件,怎样在UNIX下,用C统计处这些文件中单词个数的总和 ,及每个单词出现的次数,多谢大家了~~希望谁能告诉我的大致算法。
[解决办法]
扫描目录下文件的方案。
DIR *dir=opendir(foldername);
struct dirent *p;
while(p=readir(dir)){
if(p-> d_name[0]== '. ')continue;//skip special and hidden files
sprintf(filename, "%s/%s ",foldername,p-> d_name);
process_a_file(filename);
}
closedir(dir);
如果你还需要判断一个文件是否是目录,可以调用stat函数
struct stat s;
stat(filename,&s);
if(S_ISDIR(s))
.....
后面就是如何统计的问题了,可以直接使用STL中map或hash_map.
hash_map效率高一些,但是不是所有编译器都支持:
#include <string>
#include <map>
using namespace std;
typedef map <string, int> word_counter_type;
word_counter_type word_counter;
然后当在代码中读到单词w时(比如类型为char *)
可以使用
string s=w;
if(word_counter.find(s)==word_counter.end())
word_count[s]=0;
word_counter[s]++;
就可以进行计数了。
最后只要使用
word_counter_type::iterator it;
for(it=word_counter.begin();it!=word_counter.end();++it){
count < <it-> first < < ', ' < <it-> second < < '\n ';
}
就可以输出所有统计结果了