串的查找和替换.docx
《串的查找和替换.docx》由会员分享,可在线阅读,更多相关《串的查找和替换.docx(15页珍藏版)》请在冰豆网上搜索。
串的查找和替换
计算机工程学院
实习报告
课程名称:
算法设计技能训练
设计题目:
串的查找和替换
院系:
计算机工程学院
专业:
计算机科学与技术(单招)
学生姓名:
高苏生学号:
起止日期:
2015年1月5日~2015年1月12日
指导教师:
严云洋张亚红
学年学期:
2014~2015学年第1学期
设计任务书
课题
名称
集合运算
设计
目的
综合运用程序设计、算法设计的方法,对实际应用中的问题进行数据分析和组织、算法设计和分析、程序设计和调试等环节,将理论与实践相结合,掌握利用计算机解决实际问题的基本方法和基本步骤,培养学生良好的程序设计风格、算法设计和分析能力。
实验
环境
PIV以上计算机,WindowXP以上操作系统;
编程语言不限。
任务
要求
要求学生结合课程体系的实际需求及实践能力、实验条件等外部因素,完成集合运算课题的设计任务。
课题功能:
功能:
打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
任务要求:
1)界面友好,函数功能要划分好;2)总体设计应画流程图;3)程序要加必要的注释。
4)学生完成设计任务后,按要求提交算法设计报告,设计报告规范化,并能够反映算法设计的实际内容。
工作进度计划
序号
起止时间
工作内容
1
1~6周
制定课程设计计划,编写课程设计指导书
2
13~14周
下发任务,学生选题,分组,查阅资料
3
18周
上机系统调试,课程设计报告,课程设计答辩
4
18周
上交报告电子及打印文档
指导教师:
2015年1月5日
课程设计摘要(题目)…………………………………………………03
1.引言………………………………………………………………03
2.需求分析…………………………………………………………04
3程序源代码………………………………………………………13
4.测试结果…………………………………………………………16
5.设计体会…………………………………………………………18
参考文献……………………………………………………………20
1.设计内容和要求
设计内容:
打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
设计要求:
(1)符合课题要求,实现相应功能;
(2)操作方便易行;
(3)注意程序的实用性、安全性;
2.本设计所采用的数据结构
3.1数组
数组在编程应用时调用很方便随意,但在更改数组时比较麻烦必须调用数组中的所有元素。
charkeyWords[SIZE];
charcopyWords[SIZE];
charstrOne[MAXLEN];
charstrTwo[MAXLEN];
3.2串的匹配
if(keyWords[0]==strOne[i])
if(keyWords[j]!
=strOne[countFlag++])
3.功能模块详细设计
3.1详细设计思想
a)需求分析
打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
b)概要设计
Ø程序头设计
对程序作简单介绍以及输出程序制作人的基本信息。
main()
{
printf("\n\n\n\t\t\t数据结构课程设计\n");
printf("\n\t\t\t题目:
串的查找与替换\n");
printf("\n\t\t\t专业:
计算机科学与技术\n");
printf("\n\t\t\t学号:
\n");
printf("\n\t\t\t姓名:
高苏生");
printf("\n\t程序作用:
打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。
");
printf("\n************************************\n");
}
主函数voidmain()
通过for循环对字符串进行匹配,找到匹配的单词然后将copy的单词字符放入strTwo数组中,不匹配的单词也放入数组strTwo中完成替换,最后把strTwo中的字符放回文件中完成操作。
C)设计思想
串的查找与替换要实现的功能是:
打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
首先实现程序比较简单的功能,即:
输入要替换的单词和给定单词gets(keyWords);gets(copyWords)。
然后实现程序打开文件的功能。
最后编写最核心的替换功能,首先用关键字来匹配要查找的单词,第一个单词匹配上的话再判断这个关键字在不在单词的首字母上,否则不匹配,主要是要实现替换单词的功能不替换其他单词中的字符串。
然后匹配第二个字母,这样一次类推的判断。
不匹配的单词直接放入strTwo数组中,匹配的单词先替换然后再放入strTwo数组中。
D)流程图
3.2核心代码
Ø打开文件
if((fp=fopen("filename","r"))==NULL)
{
printf("文件打开失败!
\n");
exit(0);
}
Ø查找和替换单词
while(!
feof(fp))/*读文件*/
{
strOne[countOne++]=fgetc(fp);/*这是从指定稳中取得一个字符strOne[countOne++]=fgets(fp);这是从指定文章中取得一个字符串*/
}
countOne--;/*减去最后一个文件结束字符*/
for(i=0;i{
if(keyWords[0]==strOne[i])
{
if((''==strOne[i-1])||('\n'==strOne[i-1])||(0==i))
{
flag=1;
countFlag=i+1;
for(j=1;keyWords[j]!
='\0';j++)
{
if(keyWords[j]!
=strOne[countFlag++])/*是否匹配*/
{
flag=0;
break;
}
}
if((''==strOne[countFlag])||('\n'==strOne[countFlag])||(EOF==strOne[countFlag]))/*2.检查单词后的一个字符*/
{
if(1==flag)/*若匹配,则进行拷贝*/
{
i=countFlag-1;
for(j=0;copyWords[j]!
='\0';j++)
{
strTwo[countTwo++]=copyWords[j];
}
}
}
else/*另外*/
{
strTwo[countTwo++]=strOne[i];
}
}
else/*另外*/
{
strTwo[countTwo++]=strOne[i];
}
}
else/*另外*/
{
strTwo[countTwo++]=strOne[i];
}
}
3.3调试分析
1开始执行
2.调试程序
4.课程设计心得及存在问题
心得:
通过这次做课程设计,发现了学习中的很多问题,平时学习的东西在做起来时有很大的困难,独立构思一个程序很难,不像平时看程序一样简单。
想出来程序结构后,就一个简单的打开文件就费了好大的劲,运行几次都出现了异常,最后找学长请教才学会使用exit()命令。
核心程序就更复杂了,做了很久都没头绪,最后在一位学长的辅助下完成了核心程序。
存在问题:
刚开始实现的功能是先输入要查找和替换的单词,再输入要打开的文件,做完程序后想把打开文件的程序放到前面,可换位置后就一直出错。
5.源程序
#include
#include
#defineSIZE20/*查找单词字符和输入替换单词少于20*/
#defineMAXLEN10000/*文章字符不大于10000*/
voidmain()
{
inti,j;
intflag;/*用于标记匹配单词*/
intcountFlag;/*用于检查匹配计数*/
intcountOne=0;/*记录未改文章字符个数*/
intcountTwo=0;/*记录改后文章字符个数*/
charkeyWords[SIZE];/*查找单词*/
charcopyWords[SIZE];/*替换单词*/
charstrOne[MAXLEN];/*将未改文章的所有字符储存在里面*/
charstrTwo[MAXLEN];/*将改后文章的所有字符储存在里面*/
charfilename[20];/*输入的文件名的字符个数*/
{
printf("\n\n\n\t\t\t数据结构课程设计\n");
printf("\n\t\t\t题目:
串的查找与替换\n");
printf("\n\t\t\t专业:
计算机科学与技术\n");
printf("\n\t\t\t学号:
\n");
printf("\n\t\t\t姓名:
高苏生");
printf("\n\t程序作用:
打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。
");
printf("\n******************************************************************************\n");
}
FILE*fp;
printf("请输入要查找的单词:
");
gets(keyWords);
printf("请输入要替换的单词:
");
gets(copyWords);
printf("请输入要打开的文件名:
");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)/*读文件,前边的就是输入的文件名,后边是指只读read*/
{
printf("文件打开失败!
\n");
exit(0);
}
while(!
feof(fp))/*读文件*/
{
strOne[countOne++]=fgetc(fp);/*这是从指定稳中取得一个字符strOne[countOne++]=fgets(fp);这是从指定文章中取得一个字符串*/
}
countOne--;/*减去最后一个文件结束字符*/
for(i=0;i{
if(keyWords[0]==strOne[i])/*判断查找单词第一个字符是否匹配*/
{
if((''==strOne[i-1])||('\n'==strOne[i-1])||(0==i))/*1.检查单词前的一个字符*/
{
flag=1;
countFlag=i+1;
for(j=1;keyWords[j]!
='\0';j++)
{
if(keyWords[j]!
=strOne[countFlag++])/*是否匹配*/
{
flag=0;
break;
}
}
if((''==strOne[countFlag])||('\n'==strOne[countFlag])||(EOF==strOne[countFlag]))/*2.检查单词后的一个字符*/
{
if(1==flag)/*若匹配,则进行拷贝*/
{
i=countFlag-1;
for(j=0;copyWords[j]!
='\0';j++)
{
strTwo[countTwo++]=copyWords[j];
}
}
}
else/*另外*/
{
strTwo[countTwo++]=strOne[i];
}
}
else/*另外*/
{
strTwo[countTwo++]=strOne[i];
}
}
else/*另外*/
{
strTwo[countTwo++]=strOne[i];
}
}
fclose(fp);
if((fp=fopen("filename","w"))==NULL)/*写入文件*/
{
printf("文件打开失败!
\n");
exit
(1);
}
for(i=0;i{
fputc(strTwo[i],fp);
}
fclose(fp);
}
参考文献
【1】严蔚敏,吴伟民数据结构(C语言版)清华大学出版社
【2】谭浩强C程序设计(第三版)清华大学出版社
【3】胡学钢.数据结构算法设计指导[M].北京:
清华大学出版社,1999
【4】罗宇等.数据结构[M].北京:
北京邮电大学出版社,2003
指导教师评语
学号
姓名
李克勤
班级
计算机11112
选题
名称
哈夫曼树应用
序号
评价内容
权重(%)
得分
1
考勤记录、学习态度、工作作风与表现。
5
2
自学情况:
上网检索机时数、文献阅读情况(笔记)。
10
3
论文选题是否先进,是否具有前沿性或前瞻性。
5
4
成果验收:
是否完成设计任务;能否运行、可操作性如何等。
20
5
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。
30
6
文献引用是否合理、充分、真实。
5
7
答辩情况:
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
25
合计
指导教师(签章):
年月日