单词统计程序C++

上传人:壹****1 文档编号:433118417 上传时间:2022-09-25 格式:DOC 页数:15 大小:767KB
返回 下载 相关 举报
单词统计程序C++_第1页
第1页 / 共15页
单词统计程序C++_第2页
第2页 / 共15页
单词统计程序C++_第3页
第3页 / 共15页
单词统计程序C++_第4页
第4页 / 共15页
单词统计程序C++_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《单词统计程序C++》由会员分享,可在线阅读,更多相关《单词统计程序C++(15页珍藏版)》请在金锄头文库上搜索。

1、单词统计问题描述文字研究人员需要统计某篇英文小说中某些特定单词的出现次数和位置,试写出一个实现这一目标的文字统计系统。这称为“文学研究助手”。要求算法输入:文本文件和词集。算法输出:单词出现的次数,出现位置所在行的行号(同一行出现两次的只输出一个行号)。算法要点:(1)文本串非空且以文件形式存放。(2)单词定义:用字母组成的字符序列,中间不含空格,不区分大小写。(3)待统计的单词不跨行出现,它或者从行首开始,或者前置一个空格。(4)数据结构采用二维链表,单词结点链接成一个链表,每个单词的行号组成一个链表,单词结点作为行号链表的头结点。需求分析用户需求:用户可以通过该程序查询和统计一篇英文文章中

2、某些特定单词出现次数和位置。功能需求:用户可以输入单词来查询单词出现次数和位置; 程序可以正确显示查询结果; 用户可以选择是否在一次输出后继续查询; 在一次查询中的结果记录到一个二维链表中。概要设计 为达到设计要求,本程序采用二维链表存储单词结点和相关的位置信息。抽象数据类型:struct nodeint col; /行坐标int row; /所在行的列坐标node* next; /指向下一个坐标结点的指针; /单词坐标坐点类型struct Nodechar words20; /单词数组node* ptr; /指向单词坐标结点的指针Node* next; /指向下一个单词结点的指针int nu

3、m; /单词所含字符个数; /单词结点class TLinkpublic:TLink() head = NULL; /构造函数TLink() /析构函数while( head != NULL )Node* temp;temp = head;head = head - next;delete temp;void Insert( char* Item );/前条件:参数Item为一个字符数组。/后条件:Item所包含的单词被插入到链表。void calcute(char *szFile,int size);/前条件:szFile以正确保存了文本字符,size为文本字符长度。/后条件:统计链表每一个

4、插入的单词的个数及所在行、列坐标。Node* gethead();/前条件:链表已初始化/后条件:返回链表头指针private:Node* head;char A_to_a( char alp );/前条件:alp为一个正确的英文字母/后条件:如果alp是大写字母,则转化为小写字母,否则不变。void showwindow();/后条件:显示统计结果。void show_text();/前条件:在正确的路径上存在一个英文文本。/后条件:读入英文文本到字符数组并显示在屏幕上。void input();/后条件:读入用户输入的字符并插入到单词链表。数据结构图解: 将从文件流读入的文章字符存到szF

5、ile字符数组中,以空格计数行单词个数,以换行符记录文章列数,将输入后插入到链表中的单词与字符数组中的单词比较,遇到相等的则将当前的行列数插入到链表的位置结点中,并且单词个数加1。本程序允许用户选择是否重复进行,并且对于在一次操作中重复输入的单词,在链表中不进行重复插入。功能模块: 模块调用: 程序流程图:主要模块伪码概要设计:插入函数(参数:Item【】数组): 新建单词结点;while( Itemi != 0 ) 复制各字符到单词结点的单词数组中; 记录单词字母个数; 插入单词字母个数到链表相应域;temp - wordsi = 0;查找并比较链表中是否已有要插入的单词; 如果有 不进行插

6、入并销毁新建结点; 否则 插入新建的单词结点;/*/统计函数( 参数:char *szFile, int size)while( 没有到文本字符的结尾 )依次遍历文本字符,遇到非字母字符时计数单词所含字母个数;while( 没有到链表尾 )if( 单词结点所含单词的字母个数与计数相等 )忽略大小写比较本次遍历到的单词和链表中的结点单词; if(相等) 插入行列值 遇空格行单词个数加1; 遇换行列数加1;/*/结构显示模块while( 没到链表尾 )输出结点单词;如果存在,则输出单词的所有行、列值及出现次数; 否则输出没有该词或输入错误信息;/*/输入模块doif( 链表不空 )清空链表;输出提

7、示信息;接受用户输入; while( true )输入的是结束字符; 退出;记录输入逗号前的单词;插入到链表;继续输入;if( 链表空 )输出 没有插入任何单词!;else 统计; 显示结果;提示是否继续;输入;while( 不继续 );详细设计程序清单:/FILE:source.h#ifndef SOURCE_H#define SOURCE_Hstruct nodeint col;int row;node* next;struct Nodechar words20;node* ptr;Node* next;int num;class TLinkpublic:TLink() head = NU

8、LL; TLink()while( head != NULL )Node* temp;temp = head;head = head - next;delete temp;void Insert( char* Item );void calcute(char *szFile,int size);Node* gethead();private:Node* head;char A_to_a( char alp );void showwindow();void show_text();void input();#endif#include#include#include#include source

9、.husing namespace std;TLink link;int i=0;char szFile2000;int main()show_text();cout wordsi = Itemi;+ i;temp - num = i;temp - wordsi = 0;Node* ptrr = NULL;ptrr = link.gethead();while( ptrr != NULL ) if( ptrr - num = temp - num )int n;for( n = 0; n wordsn ) != A_to_a( Itemn ) )break;if( n = i )flag =

10、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; elsedelete temp;/*/char A_to_a( char alp )if( ( alp = A ) & ( alp = Z ) )alp = alp + 32;return alp;/*

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号