栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

文本文件单词统计 数据结构课程设计

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

文本文件单词统计 数据结构课程设计

设计题目 1. 文本文件单词统计 1.1 【问题描述】 编写一个文本文件单词统计的程序,包括建立文件、单词统计、单词查询、单词定位的功能。 1.2 【基本要求】 程序应先询问用户的 ID 号 (ID 号包括两个大写字母和 4 位数字 ) ,例如 : 请输入用户 ID 号 : AB1234 程序应对输入的 ID 号验证,符合 ID 号要求的格式,然后程序提示四种选择 : (1) 建立文件 (2) 单词统计 (3) 单词查询及定位 (4) 退出 注意: i) 文件至少包含 50 个英文单词(一定出现重复的单词,且一定包含数字) ii) 文档不规范,单词之间可能不只有一个空格,并且有加引号的一些单词“ jiaozi ” 加引号的单词算单词,但数字不算单词 iii) 逐行扫描文本文件,计算文档中单词总数,及各个单词出现的频次,并且按照单词首字母 abcd …… 的顺序排列,显示并生成 soft.txt 文件 iv) 查询任意给出的单词是否存在,如果不存在,在屏幕上输出“ 查无此词! ”;如果存在,显示单词 出现的总次数,并且详细列出其 出现的位置。 例如: 请您输入待查询的词: of 单词 of 共出现了 2 次; 第 1 次出现在第 1 行,第 5 个位置; 第 2 次出现在第 3 行,第 1 个位置。 请您输入待查询的词: 完整代码 
#include

using namespace std;

string s,word_text, words;
vector words_single;   //存放要查找的单词 方便比较 
vector v;
vector v3;
vector v4;
int n,row,col,temp;
string j = "%";     //解决最后一次出现的位置为0的问题 

int find_word(int col)
{
	words_single.insert(words_single.end(),j);
	for(int i=col;i11)
		{ 
			
			row = col/11+1;	
			temp_col = col%11;	
		}
		printf("它在文件output中第%d次出现的位置位于第%d行第%d列n",n,row,temp_col);	
		words_single.clear();
		find_word(col);		
	}
	else
	{
		return 0;	
	}
}

int main()
{
	int flag=0;
	bool sign = 0;
	printf("请输入用户ID号:");
	cin >> s;
	vector v2;
	vector word_num;
	int num;  //去重后单词的个数 
	int sub_num;
	
//检查ID号格式是否正确   两个大写字母和四个数字 	
	regex pattern("[A-Z][A-Z]\d{4}");       //正则 
	sign = std::regex_match(s,pattern);
	while(sign)
	{
		printf("请选择操作:n"); 
		cout << "1 建立文件" << endl << "2 单词统计" <> words;
			int cnt1 = count(v2.begin(),v2.end(), words);    //判断目标单词是否存在 
			if(!cnt1)
			{
				 cout << "查无此词"< 
 

代码分析 万能头文件 全局变量声明
#include
 
using namespace std;
 
string s,word_text, words;
vector words_single;   //存放要查找的单词 方便比较 
vector v;              //用于存放初始输入经过规格化的文本
vector v3;             //工具vector
vector v4;             //工具vector
int n,row,col,temp; //n 第几次出现   row 行数  col 列数  temp工具人
string j = "%";     //解决最后一次出现的位置为0的问题

 好的点是全局变量声明后,在整个程序段中都可以使用

然后,声明了四个vector数组 缺点就是占的空间比较大,优点的话是不会发生数据的错乱或者混淆

功能三的实现 实现文件中单词的定位查询
int find_word(int col)     //col 用于记录行数
{
	words_single.insert(words_single.end(),j);    //j就是字符串"%"  
	for(int i=col;i11)
		{ 
			
			row = col/11+1;	
			temp_col = col%11;	
		}
		printf("它在文件output中第%d次出现的位置位于第%d行第%d列n",n,row,temp_col);	
		words_single.clear();
		find_word(col);		
	}
	else
	{
		return 0;	
	}
}

 算法:切片,重新输入 然后定位查询 

在words_single开始插入字符 “%”的原因是,占起址为0的空间,然后减的时候减去0刚好得到对应的位置,也就是单词对应的位置

col用作标志位,每次从col的下一个开始再次存入数组中,然后采用find对新的数组进行查找相关词,找到后,再次重找到位置的下一个切片存入数组中,再次遍历查询,直到没有找到目标词,然后退出

v3是在主函数中经过处理的 char 类型的数组,以一个单词为单位进行遍历

主函数中依次实现四个功能
int main()
{ 
	int flag=0;        //标志用于指定进入哪个功能
	bool sign = 0;     // ID号是否符合格式的代码
	printf("请输入用户ID号:");
	cin >> s;
	vector v2;      //字符型数组v2
	vector word_num;   //
	int num;  //去重后单词的个数 
	int sub_num;   //功能2中查找对应单词出现次数的标志
	
//检查ID号格式是否正确   两个大写字母和四个数字 	
	regex pattern("[A-Z][A-Z]\d{4}");       //正则 判断是否符合格式要求
	sign = std::regex_match(s,pattern);
	while(sign)       //当符合要求后进入
	{
		printf("请选择操作:n"); 
		cout << "1 建立文件" << endl << "2 单词统计" <> words;
			int cnt1 = count(v2.begin(),v2.end(), words);    //判断目标单词是否存在 
			if(!cnt1)
			{
				 cout << "查无此词"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号