段落单词统计C.docx
- 文档编号:5552929
- 上传时间:2022-12-19
- 格式:DOCX
- 页数:15
- 大小:74.19KB
段落单词统计C.docx
《段落单词统计C.docx》由会员分享,可在线阅读,更多相关《段落单词统计C.docx(15页珍藏版)》请在冰豆网上搜索。
段落单词统计C
实验报告2
实验名称:
数据结构与软件设计实习
题目:
文章段落单词统计
专业:
生物信息学班级:
01姓名:
学号:
实验日期2010.07.23
一、实验目的:
掌握基本的输入输出方法,实现链表下的条件判断和循环程序程序的设计;
掌握结构体的应用;
二、实验要求:
待统计的段落要一次输入完毕,统计工作一次完成,程序输出结果为每个词出现的次数和出现位置。
二、实验内容:
对某段英文统计某些单词出现的位置和次数。
统计的词汇要一次输入完毕,统计工作一次完成,程序输出结果为每个词出现的次数和出现位置。
编程解决一些实际应用问题。
四、实验编程结果或过程:
1.数据定义
structnode
{
intcol;//行坐标
introw;//所在行的列坐标
node*next;//指向下一个坐标结点的指针
};//单词坐标坐点类型
structNode
{
charwords[20];//单词数组
node*ptr;//指向单词坐标结点的指针
Node*next;//指向下一个单词结点的指针
intnum;//单词所含字符个数
};//单词结点
classTLink
{
public:
TLink(){head=NULL;}
//构造函数
~TLink()
//析构函数
{
while(head!
=NULL)
{
Node*temp;
temp=head;
head=head->next;
deletetemp;
}
}
voidInsert(char*Item);
voidcalcute(char*szFile,intsize);
Node*gethead();
private:
Node*head;
};
charA_to_a(charalp);
voidshowwindow();
voidshow_text();
voidinput();
2.函数如下,代码详见文件“单词统计.cpp”
3.运行测试结果,运行结果无误,如下图
显示要查找的单词
显示所有单词数量及位置
错误调试,能够正确处理错误,如下图
调试分析
输入要查找的单词之后,单词插入链表,停止输入后,程序开始在文本字符中查找链表中的单词。
程序从文本数组顺次扫描,并在扫描到空格时记录一个单词的扫描结束,并记录单词所含字母个数,然后查找链表,如有和该单词字母个数相同的记录则进行比较,否则继续查找下一个直到链表尾。
此后程序继续扫描文本字符数组的下一个单词并和链表中单词进行相同的比较过程,直到字符数组扫描完毕。
要想在输出结果后继续,则选择Y或y继续,否则输入N或n退出。
最后输出结果。
五、实验总结:
(1)实验中的存在问题和提高
存在问题:
程序有待简化。
提高:
程序运行比较人性化。
(2)收获与体会
基本的输入输出方法,实现链表下的条件判断和循环程序程序的设计;
结构体的应用;
附录源程序
//FILE:
source.h
#include
#include
#include
#include
usingnamespacestd;
#ifndefSOURCE_H
#defineSOURCE_H
structnode
{
intcol;
introw;
node*next;
};
structNode
{
charwords[20];
node*ptr;
Node*next;
intnum;
};
classTLink
{
public:
TLink(){head=NULL;}
~TLink()
{
while(head!
=NULL)
{
Node*temp;
temp=head;
head=head->next;
deletetemp;
}
}
voidInsert(char*Item);
voidcalcute(char*szFile,intsize);
Node*gethead();
private:
Node*head;
};
charA_to_a(charalp);
voidshowwindow();
voidshow_text();
voidinput();
inti=0;
charszFile[2000];
TLinklink;
voidTLink:
:
Insert(char*Item)
{
TLinklink;
intflag=0;
Node*temp;
temp=newNode;
inti=0;
while(Item[i]!
='\0')
{
temp->words[i]=Item[i];
++i;
}
temp->num=i;
temp->words[i]='\0';
Node*ptrr=NULL;
ptrr=link.gethead();
while(ptrr!
=NULL)
{
if(ptrr->num==temp->num)
{
intn;
for(n=0;n
if(A_to_a(ptrr->words[n])!
=A_to_a(Item[n]))
break;
if(n==i)
{
flag=1;
break;
}
}
ptrr=ptrr->next;
}
if(flag!
=1)
{
temp->ptr=NULL;
temp->next=NULL;
Node*Temp=head;
if(head==NULL)
{
head=temp;
}
else
{
while(Temp->next!
=NULL)
Temp=Temp->next;
Temp->next=temp;
}
}
else
deletetemp;
}
/*****************************************************************/
charA_to_a(charalp)//大小写转换
{
if((alp>='A')&&(alp<='Z'))
alp=alp+32;
returnalp;
}
/*****************************************************************/
voidTLink:
:
calcute(char*szFile,intsize)
{
//cout<<"calcuteiscalled!
"< inti=0;//记录已搜索过的字符数-1 intcol=1;//列标 introw=0;//行标 intcount;//记录空格数-1 Node*ptrr=NULL; while(i { ptrr=link.gethead(); intj=0;//对每个单词从开始计数 while((szFile[i]>='a'&&szFile[i]<='z')||(szFile[i]>='A'&&szFile[i]<='Z')) { ++i; ++j; } while(ptrr! =NULL) { if(ptrr->num==j) { intn; for(n=0;n<=j;++n) if(A_to_a(ptrr->words[n])! =A_to_a(szFile[i-j+n])) break; if(n==j) { node*temp; temp=newnode; temp->col=col; temp->row=row; temp->next=NULL; node*Temp=ptrr->ptr; if(ptrr->ptr==NULL) { ptrr->ptr=temp; } else { while(Temp->next! =NULL) Temp=Temp->next; Temp->next=temp; } }//插入行数 } ptrr=ptrr->next; } if(szFile[i]==''||szFile[i]=='\n') { count=-1; while(szFile[i]=='') { ++i;//设置列数 ++row;//行的单词个数加 ++count;//单词之间空格-1 } row=row-count; if(szFile[i]=='\n') { ++col;//列遇到换行累加 ++i; row=0;//单词的行个数清零 } } else ++i; } cout< } /****************************************************************/ Node*TLink: : gethead() { returnhead; } /********************************************************/ voidshowwindow() { Node*curptr=link.gethead(); while(curptr! =NULL) { intword_num=0; for(intk=0;curptr->words[k]! ='\0';++k) cout< cout< if(curptr->ptr==NULL) cout<<"\n没有该词,或输入不正确! "< else cout<<"位置(行,列): "; while(curptr->ptr! =NULL) { cout<<"("; cout< cout<<","; cout< cout<<")"; cout<<''; curptr->ptr=curptr->ptr->next; word_num++; } cout< cout<<"\n该单词共出现"< "< curptr=curptr->next; } } /*************************************************************/ voidshow_text() { ifstreamfin; fin.open("1.txt"); if(fin.fail()) { cout<<"Inputfileopeningfailed.\n"; exit (1); } charnext; intx=0,yy=0; fin.get(next); while(! fin.eof()) { if(! (next>=65&&next<=90||next<=122&&next>=97))yy=yy+1; elseyy=0; if(yy==1)++x; szFile[i]=next; ++i; fin.get(next); } szFile[i]='\0'; for(intk=0;k cout< cout<<"\n\n*****单词总数: "< } /**********************************************************************/ voidinput() { charItem[40];//暂存数组 charin;//接受输入字符 charans;//判断是否重新开始 do{ if(link.gethead()! =NULL) link.~TLink(); cout<<"\n请输入要统计的单词(输入@键结束): "< cin>>in; intflag=1; while(true) { if(in=='@') break; intm=0; while(in>=65&&in<=90||in<=122&&in>=97) { Item[m]=in; ++m; cin>>in; if(in=='@') { flag=0; break; } } Item[m]='\0'; link.Insert(Item); if(flag==0) break; cin>>in; } if(link.gethead()==NULL) cout<<"没有任何单词! "< else { link.calcute(szFile,i); showwindow(); } cout<<"是否继续? (Y/yorN/n): "; cin>>ans; }while((ans! ='n')&&(ans! ='N')); } intputall(char*aa) { charItem[40];//暂存数组 charin;//接受输入字符 intsd=0; do{ if(link.gethead()! =NULL) link.~TLink(); in=aa[sd];if(aa[sd]=='@')break;sd++; intflag=1; while(true) { if(in=='') break; intm=0; while(in>=65&&in<=90||in<=122&&in>=97) { Item[m]=in; ++m; in=aa[sd];if(aa[sd]=='@')break;sd++; if(in=='') { flag=0; break; } } Item[m]='\0'; link.Insert(Item); if(flag==0) break; in=aa[sd];if(aa[sd]=='@')break;sd++; } if(link.gethead()==NULL) cout<<"没有任何单词! "< else { link.calcute(szFile,i); showwindow(); } }while(aa[sd]! ='@');return0; } intfo(char*aa) { FILE*fp1; charch; if((fp1=fopen("1.txt","w"))==NULL) { printf("Cannotopenfilestrikeanykeyexit! "); getchar(); return0; } printf("请输入段落(要结束请按@): \n"); ch=getchar();inti=0; while((aa[i]=ch)! ='@') { fputc(ch,fp1);i++; ch=getchar(); } fputc(ch,fp1); cout< fclose(fp1); return0; } intmain() {charaa[10000]={'a'},yn; fo(aa); show_text(); input(); cout<<"是否要显示所有单词数量及位置(是: y/Y,否: n/N): "; cin>>yn; if((yn! ='n')&&(yn! ='N')) putall(aa); return0; } #endif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 段落 单词 统计