统计一篇文章中的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