C++课程设计实验报告模板.docx
- 文档编号:11663215
- 上传时间:2023-03-29
- 格式:DOCX
- 页数:12
- 大小:138.05KB
C++课程设计实验报告模板.docx
《C++课程设计实验报告模板.docx》由会员分享,可在线阅读,更多相关《C++课程设计实验报告模板.docx(12页珍藏版)》请在冰豆网上搜索。
C++课程设计实验报告模板
南京理工大学紫金学院VC++课程设计报告
课程:
VC++课程设计
系别:
计算机系
班级:
计算机科学与技术
学号:
姓名:
顾佳燕
选题名称:
字符串操作
选题难易别:
A级
起止时间:
2012.11.20~2012.12.22
指导教师:
朱俊
2012年12月
1.程序功能介绍:
通过多种成员函数的定义和运算符的重载,实现字符串的各种直接操作,如:
去掉串首、串尾与子串相同的字符,子串在主串中的定位,用新子串更换主串中的指定子串,比较字符串的大小,字符串连接等,所有功能已经通过验证。
2.课程设计要求
(1)将主程序main()中的输出语句printf()改为VC++里的输出语句。
(2)程序中对字符串的处理函数均使用了字符数组sAns,它占用了大量存储空间,试使用动态分配存储空间的方法改写所有的函数,是之避免使用预先定义的长度很大的数组;并增加类的析构函数,删除动态分配存储空间。
(3)新增运算符重载函数,重载—,—=运算符,实现字符串的删除操作,并根据返回值判断操作是否成功。
(4)新增成员函数voidDelRepeat(),实现在原字符串中删除相邻的重复字符的功能。
(5)新增成员函数intAddStart(FStringstr,intstart),实现将字串str插入到原字符串中从第start字符开始位置上,操作正返回1。
(6)改写main函数的结构,界面为菜单形式,根据菜单选项来验证类中所定义的各种成员函数及操作符重载函数的正确性。
3.对课程题目的分析与注释
字符串或串(String)是由零个或多个字符组成的有限序列。
一般记为s='a1a2···an'(n>=0)。
它是编程语言中表示文本的数据类型。
一个简单的字符串操作是“连接”:
也就是说先写一个字符串S,随后在后面再写一个T得到ST这样一个过程。
其它的常见操作包括在一个长字符串中搜索一个子串,排列一组字符串以及分析一个字符串。
因为存在如此多的字符串应用方式,所以相应地有许多权衡了不同应用的相关算法。
高级的字符串算法通常使用包括后向树和有限状态机在内的复杂机制和数据结构。
4.程序设计和说明(说明算法思想、设计思路,给出重要的、关键的代码)
(1)类的数据结构
原程序定义了大量的成员函数和运算符重载函数,但这些函数都是在固定空间的字符数组上网前提下实现的,课程设计要求所有的函数要利用动态分配存储空间的方法存储字符串对象,所以基本上类中所有函数都要重新写,类中的数据成员增加一项字符串的长度intnLength,这样,动态分配存储空间的操作就可以简单一些char*p=char[nLength+1]。
#include
#include
#include
#include
#include
#defineMAX_FSTRING_LENGTH//用作数组长度
classFString{//字符串类定义
private:
char*sString;
intnlength;
public:
FString();//缺省构造函数
FString(char*str);//新增构造函数,用字符串常量初始化字符串对象
FString(FString&);//新增拷贝构造函数,用类的对象初始化
~FString(){}//新增析构函数,释放字符串对象所占用的空间
voidDelRepeat();
FStringAddStart(FStringstr,intstart);
inlineFStringoperator-(constchar*sAppend);//新增函数,重载减法运算符
inlineFStringoperator-(constFStringsAppend);//新增函数,重载减法运算符
inlineFStringoperator-=(char*val);//新增函数,重载减法运算符
inlineFStringoperator-=(FStringval);//新增函数,重载减法运算符
(2)main函数结构
main函数采用菜单选项的形式来实现类中的各个功能,显示菜单如下:
1、字符串加法
voidF1(FStrings){//字符串加法
FStrings2,s3("good!
");
cout<<"请输入要操作的字符串"< char*p=newchar[100]; cin.getline(p,100); cout< char*p1=newchar[100]; cin.getline(p1,100); s+=p1;//1 s2=s+p1;//2 cout<<"结果为: "<<"'"< cout<<""< delete[]p; delete[]p1; } 2、字符串减法 voidF2(FStrings){//字符串减法 FStringsk; cout<<"请输入要操作的字符串"< char*p=newchar[100]; cin.getline(p,100); char*p1=newchar[100]; cin.getline(p1,100); sk=s-p1; cout<<"结果为: "< delete[]p; delete[]p1; } 3、字符串比较大小 voidF3(FStrings){//字符串比较大小 cout<<"请输入要操作的字符串"< char*p=newchar[100]; cin.getline(p,100); cout< char*p1=newchar[100]; cin.getline(p1,100); if(s cout<<"结果为: "<<"'"< elseif(s>p1) cout<<"结果为: "<<"'"< elseif(s==p1) cout<<"结果为: "<<"'"< delete[]p; delete[]p1; } 4、对字符串的具体操作 1)删除字符串首部相同字符 voidF4a(FStrings3){//删除字符串首部相同字符 FStrings1=s3; for(inti=1;i<=s3.Length()&&s3[i]==s3[i+1];i++){ s1=s3.LTrim(s3[i]); } cout<<"result: "< } 2)删除字符串尾部相同字符 voidF4b(FStrings3){//删除字符串尾部相同字符 FStrings1=s3; for(intl=s1.Length()-1;l>=1&&s3[l]==s3[l-1];l--){ s1=s3.RTrim(s3[l]); } cout<<"result: "< } 3)删除字符串的所有重复字符 voidF4c(FStrings3){//删除字符串的所有重复字符 FStrings4(s3); cout<<"s: "< cout<<"result: "; s4.DelRepeat(); cout< } 4)字符串的插入操作 voidF4d(FStrings3){//字符串的插入操作 intm; cout<<"输入字符串插入位置: "; cin>>m; char*p=newchar[100]; cin.getline(p,100); char*p1=newchar[100]; cout<<"输入插入字符串: "; cin.getline(p1,100); cout<<"result: "< delete[]p; delete[]p1; } 5)字符串的替换操作 voidF4e(FStrings3){//字符串的替换操作 char*p1=newchar[100]; cin.getline(p1,100); cout< char*p2=newchar[100]; cout<<"格式: 用什么替换什么"< cout<<"用: "; cin.getline(p2,100); char*p3=newchar[100]; cout<<"替换: "< cin.getline(p3,100); cout<<"Replace: "<<"'"< delete[]p1; delete[]p2; delete[]p3; } 6)字符串的倒置替换操作(首先寻找倒置的子串,再用一个新的字符串替换该子串) 7)退出 5、退出 可循环运行 3.课程设计中遇到的问题及解决方法 (1)给的源代码中的operater+的功能和+=的重合。 解决办法: 增加了一段, FStringFString: : operator+(constchar*sAppend) { charsAns[MAX_FSTRING_LENGTH]=""; strcpy(sAns,sString); strcat(sAns,sAppend); sString=_strdup(sAns); return(*this); } (2)若执行菜单选择时,若输入字符会出现死循环。 解决办法: 将整型输入变量改为字符型。 (3)在参数输入完后,结果不在本界面输出,而在下一界面 解决办法: 在输出项的最后增加一句“cout< (4)再输入完选择操作时,本来有两句操作语句,结果界面上只出现了一句 解决办法: 因为输入选择项后后输入了一个回车键,第一个语句把它当做要输入的字符了,在选择语句的后面增加字符串的输入语句。 4.课程设计中所增加的功能模块(选做) 5.课程设计结果 (1)字符串的加法 (2)字符串的减法 (3)字符串的比较 (4)删除删除字符串首部相同字符 (5)删除字符串尾部相同字符 (6)删除字符串的所有重复字符和插入操作 (7)字符串的替换 (7)退出 6.还存在的不足之处 9.对课程设计的感想和心得体会 在题目刚发下来时,我觉得题目很难,自己绝对不会做的,可是后来在书上找了对应的内容看了看,发现程序这座堡垒其实不是多么的不可攻破,只要愿意花时间,这些都不是问题。 还有一点,一个好的编程习惯会对你的改错和检查有很大的帮助,比如在某些行后面加上注释,这样有利于自己一一对应的找。 做数学题目时是一环一环相扣的,其逻辑性就是一条线,而编c++时,其逻辑就像一个神经细胞,而每一个细胞有好多主突触(函数)和细胞(主函数)相连,每一个主突触又可以连很多其他突触,形成一个大枝节,而每个大支节又可以连接很多突触。 所以每个程序就是通过主函数连接在一起的整体。 程序就是有函数构成的。 10.分工情况(选做)"<<"'"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 实验 报告 模板