C++课程设计字符串类的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
封皮(按学校要求手工填写)
课程设计任务书
目录
1 需求分析 (4)
2 算法基本原理 (4)
3 类设计 (5)
4 详细设计 (5)
4.1类的接口设计 (5)
4.2类的实现 (6)
4.3主函数设计 (6)
5 DOS界面程序运行结果及分析 (9)
5.1程序运行结果 (13)
5.2运行结果分析 (15)
6 基于MFC的图形界面程序开发 (15)
6.1基于MFC的图形界面程序设计 (15)
6.2程序测试 (19)
6.3MFC程序编写总结 (21)
7 参考文献 (21)
1 需求分析
(1)计算机处理的对象分为数值数据和非数值数据,字符串是最基本的非数值数据。其应用非常广泛,它是许多软件系统(如字符编辑、情报检索、词法分析、符号处理、自然语言翻译等系统)的操作对象。其重要性不言而喻。
(2)字符串是字符的有限集合,可记作a=’a1 …an’。其中a是字符串的名,单括号里的字符序列是字符串的值,单引号不是字符串的成分,其作用是为了避免变量名与常量混淆。ai(00,如果等于0,则称a为空串,记作:a=’’。
2 算法基本原理
(1)字符串从结构上看是一种以字符为数据元素的线性表,从存储结构的不同可分为顺序表和链式存储结构,它们都适用于字符串,但由于要求的操作不同,为了提高运算效率所选用的存储结构也是不同的。对于字符串改动较频繁的一般用链式存储结构,而顺序存储结构能够高效的读取。所以各有优点。本程序由于需要大量改动数据,理所当然的选择链式存储结构,其算法结构为:Typedef struct
{
Char *ch; /*若字符串为空,则按长度分配存储区,否则为NULL */ Int length; /*字符串的长度*、
}
(2)本题字符串要求用堆来分配字符串的存储空间,采用堆分配函数malloc,它的格式为T->ch=(char *)malloc(sizeof(char)*len,就会为字符串分配内存。
(3)函数是有字符串类进行调用的,通过在主函数中定义字符串类的对象,作为函数的参数,对于需要改写对象的需要进行址传递,我们可以通过函数在主函数中的反映来观察他的执行状态。
3 类设计
4 详细设计
整个程序分为三个独立的文档,Linequ.h文件中包括矩阵类Matrix和线性方程组类Linequ的声明,Linequ.cpp文件中包括这两个类的成员函数实现文件;main.cpp文件包括程序的主函数,主函数中定义了一个类Linequ的对象,通过这个对象求解一个四元线性方程组。
4.1 类的接口设计
//Linequ.h文件,实现类的声明
#include
#include
using namespace std;
class Matrix //基类Matrix声明
{
public: //外部接口
Matrix(int dims=2); //构造函数
~Matrix(); //析构函数
void SetMatrix(double *rmax); //矩阵赋初值
void PrintM(); //显示矩阵
protected:
int index; //方阵的行数
double* MatrixA; //矩阵存放数组首地址
};
class Linequ:public Matrix //公有派生类Linequ声明
{
public: //外部接口
Linequ(int dims=2); //构造函数
~Linequ(); //析构函数
void SetLinequ(double *a, double *b); //方程赋值
void PrintL(); //显示方程
int Solve(); //全选主元高斯消去法求解方程
void ShowX(); //显示方程的解
private: //私有数据
double *sums; //方程右端项
double *solu; //方程的解
};
经过公有派生,Linequ类获得了除构造函数、析构函数之外的Matrix类的全部成员,由于基类的成员是公有和保护类型,因此在派生类中的成员函数中,基类继承来的成员全部可以访问,而对于建立Linequ类对象的外部模块来讲,基类的保护成员是无法访问的。通过保护访问类型和公有的继承方式,实现了基类Matrix的数据的有效共享和可靠保护。在程序中,方程的系数矩阵、解以及右端项全部采用了动态内存分配技术,这些工作都是在基类、派生类的构造函数中完成,它们的清理工作在析构函数中完成。
4.2 类的实现
4.3 主函数设计
int main()
{
int a=1,p,len;
MyString S;
MyString st1;
MyString st2;
MyString sub;
MyString T;
char ch1[20];
char cl;
cout<<"****************************欢迎进入字符串操作程序
****************************"< while (a!=0) { cout<<"-------------------------------------------------------------------------------"< cout<<"请选择功能操作:"< cout<<"\n1.字符串的赋值\n2.字符串的长度\n3.字符串的比较\n4.字符串的连接\n5.求字符串的子串\n6.清空字符串\n0.退出"< cin >>a; switch(a) { case 0: cout<<"******************************谢谢使用!祝您工作顺利!*****************************"< case 1: cout<<"请输入用于赋值新字符串"< cin>>ch1; InitString(&st1); StrAssign(&st1,ch1); cout<<"字符串被赋的值为:"; PrintString(st1);break ; case 2: cout<<"请输入新字符串S"< cin>>ch1; InitString(&st1); StrAssign(&st1,ch1); cout<<"长度为:"< case 3:{ cout<<"请输入要比较的两个字符串S pk T"< cout<<"请输入第一个字符串st1(长度<20:)"; cin>>ch1; InitString(&st1); StrAssign(&st1,ch1); cout<<"请输入第二个字符串st2(长度<20):"; cin>>ch1; InitString(&st2); StrAssign(&st2,ch1); StrCompare(st1,st2); int flag=StrCompare(st1,st2); if(flag==0) { cout<<"字符串st1与st2相等"< } else if(flag>0) { cout<<"字符串st1比st2大"< } else