c++程序设计之字符串类的设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++课程设计
课程名称: C++程序设计
题目: 字符串类的设计
年级/专业/班:
学生姓名:
学号:
指导教师:
完成时间: 2013 年 12 月27 日
目录
摘要 (3)
一、引言 (3)
二、设计目的与任务 (3)
三、设计方案 (3)
1、总体设计 (3)
2、详细设计 (4)
3、程序清单 (5)
4、程序调试与体会 (7)
5、运行结果 (8)
四、结论 (9)
摘要
本课程设计的目的是设计一个定义字符串string类包含存放字符串的字符数组和
字符串中字符的个数的程序用来实现设计菜单实现功能选择、字符串的输入与赋值、字
符串的运算、字符串的输出。
设计菜单实现功能选择和字符串的输入与输出都比较简单
这里不详细讲述至于字符串的赋值有三种方法LET语句INPUT语句READ/DATA
语句给字符串变量赋值字符串的运算有很多种比方说连接、复制、查找、交换、求子串和比较等。
一些编程语言设计为编写字符串处理程序更容易编写使程序变得更简单、
清晰方便用户的操作尽量减少用户的操作。
关键词类; 对象; C++; 算法; 函数
《C++程序设计》课程设计
------字符串类的设计
一、引言
本课程设计要实现的是一个字符串类的设计的程序,这在现实生活和以后的工作中有
很强的实际意义。
符串或串(String)是由零个或多个字符组成的有限序列。
一般记为
s='a1a2•••an'(n>=0)。
它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象如在串中查找某个子串、求取一个子串、在
串的某个位置上插入一个子串以及删除一个子串等。
两个字符串相等的充要条件是长度相等并且各个对应位置上的字符都相等。
设p、q 是两个串求q 在p 中首次
出现的位置的运算叫做模式匹配。
串的两种最基本的存储方式是顺序存储方式和链接存储方式。
二、设计目的与任务
字符串主要用于编程概念说明、函数解释、用法详述见正文这里补充两点1.Free Pascal 中的Ansistring 只能看成整体很多函数无法使用就算是提取单个元素也很麻烦所以除非万不得已就不要用2.字符串在存储上类似字符数组所以它每一位的单个元素都是可以提取的如s=“aaaaabbbbb”则s【1】=“a”s【10】="b"而字符串的零位正是它的长度如s【0】=10上述功能Ansistring 没有。
这可以给我们提供很
多方便如高精度运算时每一位都可以转化为数字存入数组。
三、设计方案
1、总体设计
我们设计一个程序定义点字符串string类包含存放字符串的字符数组和字符串
中字符的个数。
实现功能
1、设计菜单实现功能选择
2、字符串的输入与赋值;
3、字符串的运算包括
1连接 2复制 3查找
4交换 5求子串 6比较
4、字符串的输出
2、详细设计
class lj连接类实现字符的连接。
lj() 构造函数传入s1 参数
s3=s1.append(s2)连接s2到s1后并赋s3
class c复制类实现字符的复制
c(string s1) 构造函数传入s1 参数
class cha查找类实现字符的查找。
if(s1.find(str2)>s1.length())cout<<"找不到你输入的字符或字符
串!"<<endl;//要查找的字符
串开始位置大于原字符串的长度就是没有这个字符串
else cout<<"你要找的字符串的开始位置是"<<s1.find(str2)+1<<endl;
class jiao交换类实现字符的交换。
jiao(string s1) 构造函数传入s1参数
s1.swap(s2)把s2和s1交换
class son求子串类求输入字符串的子串。
son(string s1) 构造函数传入s1参数
string s3=s1.assign(s1,start-1,n);//把字符串s中从start开始的n个字符赋给当前字符串
class bi比较类实现字符的比较。
if(pare(s2)<0) compare成员方法比较其大小
cout<<"s1比s2小"<<endl;
if(pare(s2)>0)
cout<<"s1比s2大"<<endl;
if(pare(s2)==0)
cout<<"s1与s2相等"<<endl;
main( )主函数调用各类。
string s1(str1);//字符串的赋值
char str1[20];//存放字符串的数组str1
int num=0,len;//保存功能选择参数num 和输入字符串的长度len
string s1(str1);//字符串数组str1 赋值给字符串类s1
len=strlen(str1);//保存字符串长度
cin>>num;输入的数值实现功能选择.
if(num==1)lj a(s1); 调用连接类。
if(num==2)c a(s1); 调用复制类。
if(num==3)cha a(s1); 调用查找类
if(num==4)jiao a(s1); 调用交换类
if(num==5)son a(s1); 调用求子串类
if(num==6)bi a(s1); 调用比较类
3、程序清单
本程序代码如下
#include <iostream.h>
#include <string>
using namespace std;
class lj//连接类
{ public:
lj(string s1) { char str2[20];
cout<<"请输入要连接的字符串:"<<endl;
gets(str2);
string s2(str2);
string s3;
s3=s1.append(s2);//连接s2 到s1 后并赋s3
cout<<s3.data()<<endl;
}
};
class c//复制类
{ public:
c(string s1) {
string s2(s1);//把s1 拷贝给s2
cout<<"副本字符串2:"<<s2.data()<<endl;
}
};
class cha//查找类
{ public:
cha(string s1) {
cout<<"请输入要查找的字符或字符串"<<endl;
char str2[20];
gets(str2);
if(s1.find(str2)>s1.length())cout<<"找不到你输入的字符或字符
串!"<<endl;//要查找
的字符串开始位置大于原字符串的长度就是没有这个字符串
else cout<<"你要找的字符串的开始位置是"<<s1.find(str2)+1<<endl; }
};
class jiao//交换类
{ public:
jiao(string s1) { char str2[20];
cout<<"请输入要交换字符串s2:"<<endl;
gets(str2);
string s2(str2);
s1.swap(s2);//把s2 和s1 交换
cout<<"交换后s1 为"<<endl;
cout<<s1.data()<<endl;
}
};
class son//求子串类
{ public:
son(string s1) {
int start,n;
cout<<"请输入子串的起始位置";
cin>>start;
cout<<"请输入子串的长度";
cin>>n;
string s3=s1.assign(s1,start-1,n);//把字符串s 中从start 开始的n 个字符赋给当前字符串
cout<<s3.data()<<endl;
}
};
class bi//比较类
{ public:
bi(string s1) { char str2[20];
cout<<"请输入要比较的字符串s2:"<<endl;
gets(str2);
string s2(str2);
if(pare(s2)<0)//比较其大小
cout<<"s1 比s2 小"<<endl;
if(pare(s2)>0)
cout<<"s1 比s2 大"<<endl;
if(pare(s2)==0)
cout<<"s1 与s2 相等"<<endl;
}
};
void main( )
{ char str1[20];//存放字符串的数组str1
int num=0,len;//保存功能选择参数num 和输入字符串的长度len
cout<<"请输入一个字符串s1:"<<endl;
gets(str1);
string s1(str1);//字符串数组str1 赋值给字符串类s1
len=strlen(str1);//保存字符串长度
while(num!=7)//功能选项
{ cout<<"请选择功能的序号"<<endl;
cout<<"1连接 2复制 3查找 4交换 5求子串 6比较 7退出"<<endl;
cin>>num;
if(num==1)lj a(s1);//调用各类的开关
if(num==2)c a(s1);
if(num==3)cha a(s1);
if(num==4)jiao a(s1);
if(num==5)son a(s1);
if(num==6)bi a(s1);
}
}
4、程序调试与体会
此程序设计完成了定义点字符串string类包含存放字符串的字符数组和字符串
中字符的个数实现了设计菜单实现功能选择、字符串的输入与赋值、字符串的运算、字
符串的输出等功能程序的设计较多如自动保存自动导入功能简化了操作过程程序
还人性化得增加了帮助这个选项这对于程序的使用者来说是一个不小的帮助本设计基
本按要求完成了课程设计的任务。
但是在程序中还存在一些不足需要改进。
如程序的编写不够简洁总之这次设
计程序让我受益良多我会好好珍惜像这种难得的机会
5、运行结果
连接
负责
查找
交换
求子串
比较
退出
四、结论
本课程设计中我成功地实现了一个定义字符串string类包含存放字符串的
字符数组和字符串中字符的个数的程序达到了预期的目的。
在课程设计之前对C++程
序的认识仅停留在看的阶段而对编程实现的认识很模糊只知道大概的意思在课程设计期间才知道离独立编程还有很远的距离。
在课程设计中我遇到了很多问题在解决问
题的过程中我都学到了很而这些都是在课堂和书本上学不到的。
通过此次课程设计我们对面向对象编程、类、字符串的运算等一系列概念有了更进一步的认识也熟悉
了所学知识在实际应用中的作用。
同时在课程设计过程中有的问题是自己解决不了的通过同学帮助我才成功地及时完成了课程设计对此表示感谢。