《串的基本操作-数据结构课程设计》由会员分享,可在线阅读,更多相关《串的基本操作-数据结构课程设计(22页珍藏版)》请在金锄头文库上搜索。
1、数据结构课程设计报告1井冈山大学电子与信息工程学院数据结构课程设计报告( 20122013 年度第一学期)课程名称: 数据结构课程设计 题 目 一: 4.2 串基本操作演示系统 院 系: 计算机科学系 班 级: 10 软件本 2 班 姓 名: xxx 学 号: 100913017 指导教师: 孙凌宇老师 成 绩: 2012 年 12 月 10 日数据结构课程设计报告2成 绩 评 定一、 指导教师评语二、 成绩成绩 备注指导教师: 日 期: 年 月 日数据结构课程设计报告3设计题目 : 4.2 串基本操作演示系统一、设计要求1问题描述如果计算机语言没有把串作为一个预先定义好的基本类型对待,又需要
2、用该语言写一个涉及串操作的软件系统时,用户必须自己实现串类型。试着实现串类型,并写一个串的基本操作演示系统。2需求分析实现若干串的常用基本操作,如串赋值、求串长、串替换、串比较、求子串及串的模式匹配等。二、概要设计为了实现以上功能,可以从 3 个方面着手设计。1 主界面设计为了实现串基本操作演示系统各功能的管理,本系统设计一个含有多个菜单项的主控单,方便用户使用。本系统主控菜单运行界面如图 1 所示。图 1 串演示系统主菜单2 存储结构设计使用串的堆分配存储表示,结构描述如下:typedef structchar *ch; /串存放的数组int curLen; /串的长度数据结构课程设计报告4
3、HString;3 系统功能设计本系统设置了主界面菜单,并在主界面上完成 7 个功能的结果显示。7 个功能的设计描述如下。(1)赋值(A-Assign)。由函数 int strAssign()实现。当用户选择 A 功能时,输入待赋值的新串串值,系统完成串赋值并输出新串值。(2)求长度(L-Length)。由函数 int StrLength()实现。当用户选择 L 功能时,系统输出串的长度。(3)求子串(S-SubString)。由函数 int substring()实现,参数 pos 和 len 分别代表子串 sub 在原串 S 上的起始位置和子串长度。当用户选择 S 功能时,系统输出子串的串
4、值。(4)子串定位(I-Index)。子串定位又称串的模式匹配,由函数 int Index()实现。当用户选择 I 功能时,系统根据用户输入的原串 ob1 和子串 ob2 的值输出子串在原串上的位置。(5)替换(R-Replace)。由函数 void Replace()实现。当用户选择 R 功能时,系统根据用户输入的原串 ob1、子串 ob2 和插入串 ob3 的值,输出用插入串替换了原串中所有指定子串后的串值。(6)判相等(C-Compare)。由函数 int Compare()实现。当用户选择 C 功能时,系统根据用户输入的 s1 与 s2 的串值进行比较。若 s1s2 则显示“s1s2”
5、;若 s1=s2 则显示“s1=s2”;若 s1S.curLen|lenS.curLen-pos) /若位置或长度不合法,退出printf(输入不合法n); exit(OVERFLOW); /退出elseif(Sub.ch) free(Sub.ch); /释放子串 sub 原有空间if(!len) /若长度 len 为 0 /就爱那个子串置为空串Sub.ch=NULL;Sub.curLen=0;else /若长度 len 不为 0Sub.ch=(char*)malloc(len*sizeof(char);for(i=0; iob1.curLen) /若输入的数值 pos 不在 ob1 的串长范
6、围内数据结构课程设计报告8printf(输入有误n);exit(ERROR);for(int i=pos-1; is2 则返回值0int i;for(i=0; i#include #include #define OK 1#define OVERFLOW 0 #define ERROR 0using namespace std; /使用名称空间 std数据结构课程设计报告14/*串的堆分配存储表示typedef structchar *ch; /串存放的数组int curLen; /串的长度HString;/*1. 初始化字符串 T int initString(HString *T) (*T
7、).ch=NULL;(*T).curLen=0;return OK;/*2. 串赋值函数int strAssign(HString *T,char *chars) /生成一个值等于串常量 chars 的串 T 并用指针返回,*chars 为指针(数组名)int i,j;if(*T).ch) free(*T).ch); /释放 T 原有空间 i=strlen(chars); /数组 chars 的长度if(!i) /若 chars 为空串,生成空串的堆分配存储表示 (*T).ch=NULL;(*T).curLen=0;else / chars 不为空串 if(!(*T).ch=(char *)m
8、alloc(i*sizeof(char) exit(OVERFLOW); /分配串的堆空间,若失败则退出 for(j=0; jS.curLen|lenS.curLen-pos) /若位置或长度不合法,退出printf(输入不合法n); exit(OVERFLOW); /退出elseif(Sub.ch) free(Sub.ch); /释放子串 sub 原有空间if(!len) /若长度 len 为 0 /将子串置为空串Sub.ch=NULL;Sub.curLen=0;else /若长度 len 不为 0Sub.ch=(char*)malloc(len*sizeof(char);for(i=0;
9、iob1.curLen) /若输入的数值 pos 个字符起,ob2 是否为 ob1 的子串printf(输入有误n);exit(ERROR);for(int i=pos-1; is2 则返回值0int i;for(i=0; ic; /输入大写字母if(c=Q) break; /退出串基本操作演示系统switch(c) /用 switch 语句对输入的大写字母进行多向选择 caseA: char cnew50;HString str;initString( /初始化串 strscanf(%s,cnew);strAssign( /调用串生成函数printf(字符串为:); for(int i=0;
10、i cnewposlen;HString sub,str;initString( /初始化串 subinitString( /初始化串 strstrAssign( /调用串生成函数substring(sub,str,pos,len); /调用子串函数printf(子串为:);for(int i=0; ic1c2;HString s1,s2;initString( /初始化串 s1initString( /初始化串 s2strAssign(strAssign(if(Compare(s1,s2)串 2n);break;case I: char c150,c250;int pos,result=0;
11、cinc1c2pos;HString str1,str2;initString( /初始化串 str1initString( /初始化串 str2strAssign(strAssign(result=Index(str1,str2,pos)+1;/调用子串定位函数 if(result=0)printf(从第%d 个字符起,串 2 不是串 1 的子串。n,pos);elseprintf(子串在原串的位置:%dn,result);break;case R: char c150,c250,c350;cinc1c2c3;HString str1,str2,str3;initString( /初始化串 str1initString( /初始化串 str2initString( /初始化串 str3数据结构课程设计报告22strAssign(strAssign(strAssign(Replace(str1,str2,str3);/调用替换函数printf(n);break;数据结构课程设计报告23