C课程设计字符串类的设计与实现论文Word格式文档下载.docx
《C课程设计字符串类的设计与实现论文Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C课程设计字符串类的设计与实现论文Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
(7)实现清空子串操作ClearString&
S;
(8)将上述功能作为类的成员函数实现,编写主函数测试上述功能。
进度安排:
第17周:
分析题目,查阅课题相关资料,进行类设计、算法设计;
第18周:
程序的设计、调试与实现;
第19周:
程序测试与分析,撰写课程设计报告,进行答辩验收。
指导教师(签字):
年月日学院院长(签字)
年月日
1需求分析-1-
2算法基本原理-1-
3类设计-2-
4详细设计-3-
4.1类的接口设计-3-
4.2类的实现-5-
4.3主函数设计-10-
5DOS界面程序运行结果及分析-11-
5.1程序运行结果-11-
5.2运行结果分析-12-
6基于MFC的图形界面程序开发-13-
6.1基于MFC的图形界面程序设计-13-
6.2程序测试-17-
6.3MFC程序编写总结-19-
7参考文献-19-
1需求分析
1计算机处理的对象分为数值数据和非数值数据,字符串是最基本的非数值数据。
2字符串是字符的有限集合,可记作a’a1…an’。
其中a是字符串的名,单括号里的字符序列是字符串的值,单引号不是字符串的成分,其作用是为了避免变量名与常量混淆。
ai0in+1称为字符串的元素,是构成字符串的基本单位。
N表示字符串的长度,且n0,如果等于0,则称a为空串,记作:
a’’。
2算法基本原理
(1)字符串从结构上看是一种以字符为数据元素的线性表,从存储结构的不同可分为顺序表和链式存储结构,它们都适用于字符串,但由于要求的操作不同,为了提高运算效率所选用的存储结构也是不同的。
对于字符串改动较频繁的一般用链式存储结构,而顺序存储结构能够高效的读取。
所以各有优点。
本程序由于需要大量改动数据,理所当然的选择链式存储结构,其算法结构为:
Typedefstruct
Char*ch;
/*若字符串为空,则按长度分配存储区,否则为NULL*/
Intlength;
/*字符串的长度*、
(2)本题字符串要求用堆来分配字符串的存储空间,采用堆分配函数malloc,它的格式为T-chchar*mallocsizeofchar*len,就会为字符串分配内存。
(3)函数是有字符串类进行调用的,通过在主函数中定义字符串类的对象,作为函数的参数,对于需要改写对象的需要进行址传递,我们可以通过函数在主函数中的反映来观察他的执行状态。
3类设计
4详细设计
整个程序分为三个独立的文档,Linequ.h文件中包括矩阵类Matrix和线性方程组类Linequ的声明,Linequ.cpp文件中包括这两个类的成员函数实现文件;
main.cpp文件包括程序的主函数,主函数中定义了一个类Linequ的对象,通过这个对象求解一个四元线性方程组。
4.1类的接口设计
//Linequ.h文件,实现类的声明
#include
usingnamespacestd;
classMatrix//基类Matrix声明
public:
//外部接口
Matrixintdims2;
//构造函数
~Matrix;
//析构函数
voidSetMatrixdouble*r;
//矩阵赋初值
voidPrintM;
//显示矩阵
protected:
intindex;
//方阵的行数
double*MatrixA;
//矩阵存放数组首地址
;
classLinequ:
publicMatrix//公有派生类Linequ声明
//外部接口
Linequintdims2;
~Linequ;
voidSetLinequdouble*a,double*b;
//方程赋值
voidPrintL;
//显示方程
intSolve;
//全选主元高斯消去法求解方程
voidShowX;
//显示方程的解
private:
//私有数据
double*sums;
//方程右端项
double*solu;
//方程的解
经过公有派生,Linequ类获得了除构造函数、析构函数之外的Matrix类的全部成员,由于基类的成员是公有和保护类型,因此在派生类中的成员函数中,基类继承来的成员全部可以访问,而对于建立Linequ类对象的外部模块来讲,基类的保护成员是无法访问的。
通过保护访问类型和公有的继承方式,实现了基类Matrix的数据的有效共享和可靠保护。
在程序中,方程的系数矩阵、解以及右端项全部采用了动态内存分配技术,这些工作都是在基类、派生类的构造函数中完成,它们的清理工作在析构函数中完成。
4.2类的实现
4.3主函数设计
intmain
inta1,p,len;
MyStringS;
MyStringst1;
MyStringst2;
MyStringsub;
MyStringT;
charch1[20];
charcl;
cout"
****************************欢迎进入字符串操作程序****************************"
endl;
whilea!
0
cout"
请选择功能操作:
"
\n1.字符串的赋值\n2.字符串的长度\n3.字符串的比较\n4.字符串的连接\n5.求字符串的子串\n6.清空字符串\n0.退出"
cina;
switcha
case0:
******************************谢谢使用!
祝您工作顺利!
*****************************"
break;
case1:
请输入用于赋值新字符串"
cinch1;
InitString&
st1;
StrAssign&
st1,ch1;
cout"
字符串被赋的值为:
;
PrintStringst1;
break;
case2:
请输入新字符串S"
长度为:
StrLengthst1endl;
case3:
请输入要比较的两个字符串SpkT"
请输入第一个字符串st1(长度20:
)"
cinch1;
请输入第二个字符串st2(长度20):
st2;
st2,ch1;
StrComparest1,st2;
intflagStrComparest1,st2;
ifflag0
字符串st1与st2相等"
elseifflag0
字符串st1比st2大"
else
字符串st1比st2小"
break;
case4:
cout"
请输入要连接的两个字符串S1&
S2"
请输入第一个字符串(长度20):
请输入第二个字符串(长度20):
InitString&
T;
Concat&
T,st1,st2;
连接后的新字符串:
PrintStringT;
break;
case5:
请输入主串S(长度20):
S,ch1;
InitString&
sub;
请输入起始位置p:
cinp;
请输入子串的长度len请考虑主串的长度"
cinlen;
所求子串为:
SubString&
sub,S,p,len;
PrintStringsub;
case6:
确定要清空的字符串(Y/N)"
cincl;
ifcl'
y'
||cl'
Y'
ClearString&
ClearString&
;
字符串操作清除成功!
default:
操作错误!
请输入正确序号!
return0;
主函数的设计思路是通过定义mystring类的对象,然后通过生成的对象去调用相应的函数从而达到调试所编写的函数功能的目的。
此主函数有着演示函数的要求,为了使它能够更灵活的进行函数的调用,首先设计了一个循环体,由整型变量a控制,当a0时就结束循环。
而在循环体中又由switcha函数来控制,通过输入不同的a的值来控制不同的操作,即函数的演示。
。
5DOS界面程序运行结果及分析
从它运行的界面可以看出,当进入函数调试状态时我们可也通过输入相应的操作序号来选择不同的操作。
例如选择输入1将进入字符串的赋值操