数据结构-课程设计 串的查找与替换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中北大学
数据结构
课程设计说明书
2011年01月06日
1设计目的
《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:
⏹了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
⏹初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
⏹提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
⏹训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科
学的工作方法和作风。
2.设计内容和要求
设计内容:
打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
设计要求:
(1) 符合课题要求,实现相应功能;
(2) 操作方便易行;
(3) 注意程序的实用性、安全性;
3.本设计所采用的数据结构
3.1数组
数组在编程应用时调用很方便随意,但在更改数组时比较麻烦必须调用数组中的所有元素。
char keyWords[SIZE];
char copyWords[SIZE];
char strOne[MAXLEN];
char strTwo[MAXLEN];
3.2串的匹配
if (keyWords[0] == strOne[i])
if (keyWords[j] != strOne[countFlag++])
4.功能模块详细设计
4.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学号:0921030336\n");
printf("\n\t\t\t姓名:杨彦军");
printf("\n\t程序作用:打开一篇英语作文,在该文章中找出所有给定的单词,然后对\n\t所有给定的单词替换为另一个单词再存盘。");
printf("\n************************************\n");
}
➢主函数void main()
通过for循环对字符串进行匹配,找到匹配的单词然后将copy的单词字符放入strTwo 数组中,不匹配的单词也放入数组strTwo中完成替换,最后把strTwo中的字符放回文件中完成操作。
C)设计思想
串的查找与替换要实现的功能是:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定的单词替换为另外一个单词,再存盘。
首先实现程序比较简单的功能,即:输入要替换的单词和给定单词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; 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]; } }