C++课程设计字符串类的设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档