统计一篇文章中的char字符个数
void getFrequency(const string FileName,map<char,float>& StoreMap)
{
string frequencyTable="f:\\frequency.txt";
fstream writeFrequency(frequencyTable,ios::out|ios::trunc);
fstream readFile(FileName,ios::in);
if(!readFile)
{
cerr<<"error occur when open file :"<<FileName<<endl;
}
char c='\0'; int wordCount=0;
while((c=readFile.get())!=EOF)
{
wordCount++;
if(StoreMap.find(c)!=StoreMap.end())
{
StoreMap[c]+=1;
}
else
{
StoreMap.insert(map<char,float>::value_type(c,1));
}
}
writeFrequency<<"total word : "<<wordCount<<endl;
for(map<char,float>::iterator iter=StoreMap.begin();iter!=StoreMap.end();++iter)
{
cout<<iter->first<<" "<<iter->second<<" ";
writeFrequency<<iter->first<<" "<<iter->second<<" ";
iter->second=iter->second/wordCount;
cout<<iter->second<<endl;
writeFrequency<<iter->second<<endl;
}
writeFrequency.close();
readFile.close();
}
bool buildTree(map<float,Node>&Article,Node *&head) { if(Article.empty()) { cerr<<"No arcticle input ! program is going to exit"<<endl; return false; exit(-1); } if(1==Article.size()) { map<float,Node>::iterator iter=Article.begin(); head=new Node((Node*)NULL,&iter->second,(Node *)NULL,'~'); head->CharSum.push_back(iter->first); Article.erase(iter); return true; } while(1!=Article.size()) { map<float,Node>::iterator iter=Article.begin(); map<float,Node>::iterator iter2=Article.begin(); iter2++; Node *p=new Node((Node*)NULL,&(iter->second),&(iter2->second),'~'); float headValue=iter->first+iter2->first; p->CharSum.reserve(iter->second.CharSum.size()+iter2->second.CharSum.size()); //合并char费了很多时间 p->CharSum.insert(p->CharSum.end(),iter->second.CharSum.begin(),iter->second.CharSum.end()); p->CharSum.insert(p->CharSum.end(),iter2->second.CharSum.begin(),iter2->second.CharSum.end()); iter->second.parent=p; iter2->second.parent=p; while (Article.find(headValue)!=Article.end()) { headValue=headValue+0.000000001; } Article.insert(map<float,Node>::value_type(headValue,*p)); //加入新的节点 head=p; //一般老说我们不希望函数外面的饿指针指向函数内的成员变量,但是这里不是指向某个成员变量,而是发生赋值行为,这是head指向了堆中的某一个空间 Article.erase(iter);//日,这里不能删除 Article.erase(iter2); } return true; }
vs2012快捷键
ctrl+K+C 注释代码块
ctrl+k+u 取消注释
参考
讲解文件操作: http://www.cnblogs.com/ifeiyun/articles/1573134.html