《C++课程设计实验报告模板.doc》由会员分享,可在线阅读,更多相关《C++课程设计实验报告模板.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、南京理工大学紫金学院VC+课程设计报告课 程:VC+课程设计系 别:计算机系班 级:计算机科学与技术学 号:姓 名:顾佳燕选题名称:字符串操作选题难易别:A级起止时间:2012.11.202012.12.22指导教师:朱 俊2012年 12 月1 程序功能介绍:通过多种成员函数的定义和运算符的重载,实现字符串的各种直接操作,如:去掉串首、串尾与子串相同的字符,子串在主串中的定位,用新子串更换主串中的指定子串,比较字符串的大小,字符串连接等,所有功能已经通过验证。2 课程设计要求(1) 将主程序main()中的输出语句printf()改为VC+里的输出语句。(2) 程序中对字符串的处理函数均使用
2、了字符数组sAns,它占用了大量存储空间,试使用动态分配存储空间的方法改写所有的函数,是之避免使用预先定义的长度很大的数组;并增加类的析构函数,删除动态分配存储空间。(3) 新增运算符重载函数,重载,=运算符,实现字符串的删除操作,并根据返回值判断操作是否成功。(4) 新增成员函数void DelRepeat(),实现在原字符串中删除相邻的重复字符的功能。(5) 新增成员函数 int AddStart(FString str ,int start),实现将字串str插入到原字符串中从第start字符开始位置上,操作正返回1。(6) 改写main函数的结构,界面为菜单形式,根据菜单选项来验证类中
3、所定义的各种成员函数及操作符重载函数的正确性。3. 对课程题目的分析与注释 字符串或串(String)是由零个或多个字符组成的有限序列。一般记为 s=a1a2an(n=0)。它是编程语言中表示文本的数据类型。 一个简单的字符串操作是“连接”:也就是说先写一个字符串S,随后在后面再写一个T得到ST这样一个过程。 其它的常见操作包括在一个长字符串中搜索一个子串,排列一组字符串以及分析一个字符串。因为存在如此多的字符串应用方式,所以相应地有许多权衡了不同应用的相关算法。 高级的字符串算法通常使用包括后向树和有限状态机在内的复杂机制和数据结构。4. 程序设计和说明(说明算法思想、设计思路,给出重要的、
4、关键的代码)(1) 类的数据结构 原程序定义了大量的成员函数和运算符重载函数,但这些函数都是在固定空间的字符数组上网前提下实现的,课程设计要求所有的函数要利用动态分配存储空间的方法存储字符串对象,所以基本上类中所有函数都要重新写,类中的数据成员增加一项字符串的长度int nLength,这样,动态分配存储空间的操作就可以简单一些char *p=charnLength+1。#include #include #include #include #include /定义参数个数可变的函数时用到#define MAX_FSTRING_LENGTH /用作数组长度class FString / 字符
5、串类定义private:char*sString;int nlength;public:FString(); /缺省构造函数FString(char *str);/新增构造函数,用字符串常量初始化字符串对象FString(FString &);/新增拷贝构造函数,用类的对象初始化FString() /新增析构函数,释放字符串对象所占用的空间void DelRepeat();FString AddStart(FString str,int start);inline FString operator-(const char *sAppend);/新增函数,重载减法运算符inline FStrin
6、g operator-(const FString sAppend); /新增函数,重载减法运算符inline FString operator-=(char *val); /新增函数,重载减法运算符inline FString operator-=(FString val); /新增函数,重载减法运算符(2) main函数结构main函数采用菜单选项的形式来实现类中的各个功能,显示菜单如下:1、 字符串加法void F1(FString s) /字符串加法 FString s2,s3(good!);cout请输入要操作的字符串endl;char *p=new char100; cin.get
7、line(p,100);coutendl; char *p1=new char100; cin.getline(p1,100);s+=p1; /1s2=s+p1;/2cout结果为:sendl;cout endl;delete p;delete p1;2、 字符串减法void F2(FString s) /字符串减法FString sk;cout请输入要操作的字符串endl;char *p=new char100; cin.getline(p,100); char *p1=new char100; cin.getline(p1,100);sk=s-p1;cout结果为:skendl;delet
8、e p;delete p1;3、 字符串比较大小void F3(FString s) /字符串比较大小cout请输入要操作的字符串endl;char *p=new char100; cin.getline(p,100);coutendl; char *p1=new char100; cin.getline(p1,100);if(sp1)cout结果为:sp1p1)cout结果为:sp1endl;else if(s=p1)cout结果为:s=p1endl;delete p;delete p1;4、 对字符串的具体操作1) 删除字符串首部相同字符void F4a(FString s3) /删除字符
9、串首部相同字符 FString s1=s3;for(int i=1;i=s3.Length()&s3i=s3i+1;i+)s1=s3.LTrim(s3i);coutresult:s1=1&s3l=s3l-1;l-)s1=s3.RTrim(s3l);coutresult:s1endl;3) 删除字符串的所有重复字符void F4c(FString s3) /删除字符串的所有重复字符FString s4(s3);couts:s4endl;coutresult:;s4.DelRepeat();couts4n;4) 字符串的插入操作void F4d(FString s3) /字符串的插入操作 int
10、m;coutm;char *p=new char100;cin.getline(p,100);char *p1=new char100;cout输入插入字符串:;cin.getline(p1,100);coutresult:s3.AddStart(p1,m)endl;delete p;delete p1;5) 字符串的替换操作void F4e(FString s3) /字符串的替换操作char *p1=new char100;cin.getline(p1,100);coutp1endl;char *p2=new char100;cout格式:用什么替换什么endl;cout用:;cin.get
11、line(p2,100);char *p3=new char100; cout替换:endl;cin.getline(p3,100); coutReplace : s3.Replace(p3,p2)endl;delete p1;delete p2;delete p3;6) 字符串的倒置替换操作(首先寻找倒置的子串,再用一个新的字符串替换该子串)7) 退出 5、 退出 可循环运行3 课程设计中遇到的问题及解决方法(1) 给的源代码中的operater+的功能和+=的重合。解决办法:增加了一段,FString FString: operator+(const char *sAppend)char
12、sAnsMAX_FSTRING_LENGTH= ;strcpy(sAns,sString);strcat(sAns,sAppend);sString=_strdup(sAns);return(*this);(2) 若执行菜单选择时,若输入字符会出现死循环。解决办法:将整型输入变量改为字符型。(3) 在参数输入完后,结果不在本界面输出,而在下一界面解决办法:在输出项的最后增加一句“coutendl;”(4) 再输入完选择操作时,本来有两句操作语句,结果界面上只出现了一句解决办法:因为输入选择项后后输入了一个回车键,第一个语句把它当做要输入的字符了,在选择语句的后面增加字符串的输入语句。4 课程设
13、计中所增加的功能模块(选做)5 课程设计结果(1)字符串的加法(2)字符串的减法(3)字符串的比较(4)删除删除字符串首部相同字符(5)删除字符串尾部相同字符(6)删除字符串的所有重复字符和插入操作(7)字符串的替换(7)退出6 还存在的不足之处9. 对课程设计的感想和心得体会在题目刚发下来时,我觉得题目很难,自己绝对不会做的,可是后来在书上找了对应的内容看了看,发现程序这座堡垒其实不是多么的不可攻破,只要愿意花时间,这些都不是问题。还有一点,一个好的编程习惯会对你的改错和检查有很大的帮助,比如在某些行后面加上注释,这样有利于自己一一对应的找。做数学题目时是一环一环相扣的,其逻辑性就是一条线,而编c+时,其逻辑就像一个神经细胞,而每一个细胞有好多主突触(函数)和细胞(主函数)相连,每一个主突触又可以连很多其他突触,形成一个大枝节,而每个大支节又可以连接很多突触。所以每个程序就是通过主函数连接在一起的整体。程序就是有函数构成的。10.分工情况(选做)