您好,欢迎访问三七文档
中南林业科技大学课程设计报告设计名称:数据结构课程设计姓名:李思贤学号:20124555专业班级:2012级计算机科学与技术系(院):计算机与信息工程学院设计时间:2013~2014学年第二学期设计地点:电子信息楼机房指导教师评语:签名:年月日成绩:1.设计目的《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:(1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;(4)训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2.课程设计任务与要求问题描述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词。基本要求:1.符合课题要求,实现相应功能;2.操作方便易行;3.根注意程序的实用性、安全性;3.需求分析打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一一个单词用户:学生开发者:李思贤4.概要设计程序头设计对程序作简单介绍以及输出程序制作人的基本信息。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学号:20124555\n);printf(\n\t\t\t姓名:李思贤);printf(\n\t程序作用:打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。);printf(\n************************************\n);}主函数voidmain()通过for循环对字符串进行匹配,找到匹配的单词然后将copy的单词字符放入strTwo数组中,不匹配的单词也放入数组strTwo中完成替换,最后把strTwo中的字符放回文件中完成操作。5.功能模块详细设计系统流程图:串的查找与替换要实现的功能是:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。首先实现程序比较简单的功能,即:输入要替换的单词和给定单词gets(keyWords);gets(copyWords)。字符串的查找串的查找和替换字符串的替换从文本读入英语文章从输入端输入文字,与文本内容对比,完成字符串的查找。记录查找到的字符位置,用输入的字符替换,并输出到文本然后实现程序打开文件的功能。最后编写最核心的替换功能,首先用关键字来匹配要查找的单词,第一个单词匹配上的话再判断这个关键字在不在单词的首字母上,否则不匹配,主要是要实现替换单词的功能不替换其他单词中的字符串。然后匹配第二个字母,这样一次类推的判断。不匹配的单词直接放入strTwo数组中,匹配的单词先替换然后再放入strTwo数组中。4.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;icountOne;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];}}6.调试分析本软件是基于Windows的编程开发,所以,软件调试必须在Windows环境下进行。调试前须做好准备工作:(1)需要安装VisualC++6.0的计算机一台;配置好之后,在VisualC++6.0环境下进行软件的调试。(2)测试数据:输入端输入:输入要查找的字符输入要替换的字符输入文件的名字文本文件的输入:输入想要修改的英文文章。7.用户手册1本程序可以在vc++5.0和vc++6.0的环境下运行。2在vc中创建一个工程,将源程序复制到.cpp中,编译链接就可以。3选择编译、运行以后会出现运行界面,选择相应的选项,根据提示即可进行演示。8.测试结果截图如下:图1程序开始的界面图2输入要查找和替换的单词图3输入要打开的文件名图4替换前文本文件内容图5替换后文本文件的内容9.源代码#includestdio.h#includestdlib.h#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数据结构课程设计\n);printf(\n题目:串的查找与替换\n)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;icountOne;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(chang,w))==NULL)/*写入文件*/{printf(文件打开失败!\n);exit(1);}for(i=0;icountTwo;i++)/*写入文件*/{fputc(strTwo[i],fp);}fclose(fp);}}10.设计心得通过设计这个字符串的查找和替换,我深刻地理解了字符串的数据结构,充分了解字符串的定义,创建,使用;并通过定义函数比较两个字符串截取制定长度的字串,通过比较,用FOR循环进行一轮查找,之后根据查找记录当前的位置,把输入内容替换进该位置。通过这么一次紧密的编程练习。我才发现自己的编程基础是如此不足,我的编程思想是如此不成熟,也让我意识到编程的趣味性以及基础的重要性,所以我要多练习,多敲代码,多理解算法,多学习人家的代码。老师所说,编程就像学作文,要想心中有墨,必须多去读,多去想,多去做,多去敲,多加练习
本文标题:字符串的查找与替换
链接地址:https://www.777doc.com/doc-5979799 .html