//统计文件中子母出现的频数
//作者:nuaazdh
//时间:2011年11月30日 20:37:04
#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;
//链表节点定义
typedef struct LNode
{ char key;
int number;
LNode *next;
}*Link;
//创建一个新结点
Link CreateNode(void)
{
Link newnode =(LNode*)malloc(sizeof(LNode));
if(newnode!=NULL)
{
newnode->number=0;
newnode->next=NULL;
}
return newnode;
}
int main()
{
char c,a;
bool flag;
Link head=NULL;//头指针
Link current=head;//当前结点
ifstream in_stream;//源文件
ofstream out_stream;//输出文件
in_stream.open("Source.txt");
//打开源文件错误
if(in_stream.fail())
{
cout<<"inserting to the file is failing";
exit(1);
}
out_stream.open("Output.txt");
//打开输出文件错误
if(out_stream.fail())
{
cout<<"inserting to the file is failing";
exit(1);
}
//遍历文件,依次读取每个字符
while(in_stream>>c)
{
flag=true;//标志c不存在于链表中
//遍历链表,判断c是否已经存在于链表中
for(current=head;current!=NULL;current=current->next)
{
//c已经存在,c对应的频数加1
if(current->key==c)
{
current->number++;
flag=false;//flag置为false
break;//跳出for循环
}
}
if(flag)
{
//c不存在,创建新结点
Link newnode=CreateNode();
newnode->key=c;
newnode->number++;
newnode->next=head;
head=newnode;
}
}
cout<<"The result:"<<endl;//控制台输出
//输出至输出文件
out_stream<<"子母"<<"\t频数"<<endl;
//遍历链表,分别输出至控制台和文件中
for(current=head;current!=NULL;current=current->next)
{
cout<<current->key<<' '<<current->number<<'\n';
out_stream<<current->key<<"\t"<<current->number<<endl;
}
//关闭流
in_stream.close();
out_stream.close();
//释放链表空间
for(current=head;current!=NULL;current=current->next)
delete current;
return 0;
}
C++ 读取文件字符,统计字符频率
最新推荐文章于 2022-12-18 16:33:52 发布