资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
编写一个精简版的string类该类的具体功能如下所示.1 计算字符串的长度,类似于string类的size或者length2 可对字符串进行赋值,如String str=hello world;3 可将char型字符串直接赋给String型字符串,如:String str=Hello world;char ch10=not at all;str=ch;4 可如同对象那样将字符串进行初始化,String str(Mother);5 可将两个字符串相加,然后将合并后的字符串赋给另一个字符串,如String str=s2+s3;6 可执行加等操作(+=),也就是将第1个字符串与第2个字符串相加,然后再赋给第1个字符串,如:String s1+=s27 可对两个字符串进行比较,如str1=str2,str1str2.8 可根据字符串的大小自动调节保存字符串的数组的大小。9 限制数组越界10通过成员函数输出字符串,如s1.getlen()。11 通过重载输出运算符输出字符串,如:string s1(hello),s2(good);couts1输入字符串,如:cins1s2创建String类上节简单地对精简版的String类的功能进行了介绍,本节首先实现这个String类。我们知道C+自带的String类在声明一个字符串后,如:String s;该字符串s仅仅是声明,并未初始化,因此该字符串是个空字符,只保存了结束符号0。我们首先来实现这个功能。由于对象的创建是通过构造函数来实现的,因此我们可以通过默认构造函数来构造一个空字符串。通过String类的默认构造函数实现空字符串。程序代码如下:1. #include 2. using namespace std;3. class String4. 5. public:6. String();7. int getlen()constreturn len;8. private:9. int len;10. char *str;11. ;12. String:String()13. 14. len = 0;15. str=new char1;16. str0=0;17. 18. int _tmain(int argc, _TCHAR* argv)19. 20. String s1;21. couts1.getlen();22. system(pause);23. return 0;24. 输出:0分析:第6行声明了一个默认构造函数,第1217行是该函数的定义部分。第14行将所创建的字符串的长度len设置为0,len在第9行定义。第15行在堆中创建一个char型数组,该数组只有一个元素,str保存该数组的地址,char型指针str在第10行定义。第16行将char型数组str中唯一一个元素保存结束字符0,因此该char型数组变成了一个字符串,一个长度为0的空字符串。main函数开始于第19行,第20行用我们创建的String类声明了一个字符串s1,然后第21行输出该字符串的长度,为0.成员函数getlen()在第7行定义,它的作用是返回字符串长度len的值。创建可以自动调节大小的String类字符串对象本节我们将在已创建空字符串的基础上创建一个有字符的字符串,并且该字符串课根据字符的长度自动调节数组的大小。要实现这个功能,我们需要一个带参数的构造函数,如: 1. String:String(const char*const ch)2. 3. len = strlen(ch);4. str = new charlen+1;5. for(int i=0;ilen;i+)6. stri = chi;7. strlen=0;8. 复制代码这样,假如我们定义并初始化了一个字符串,如String s(Hello world); 就会自动调用这个带一个参数的构造函数,同时将hello world传递到函数中,ch接收了这个字符串,第3用strlen计算hello world的长度,也就是ch的长度,该长度同时赋给String 类的私有成员变量len。第4行在堆中创建了一个char型数组,它的长度是len+1,最后一个字符用来保存结束符0。该char型数组的内存地址赋给String类的私有指针成员变量str。第56行是一个for循环,从字符串ch第1个字符开始,也就是hello world,每循环一次,即将ch中的一个字符赋给str指向的在堆中创建的char型数组,一直到结束字符前的最后一个字符为止。最后一行用str指向的在堆中创建的char型数组中的最后一个元素保存结束符号0。这样,我们就可以创建一个恰好能容纳所有字符的char型字符串数组。创建可自动调节大小的String类字符串对象。程序代码如下: 1. #include 2. using namespace std;3. class String4. 5. public:6. String();7. String(const char*const ch);8. int getlen()constreturn len;9. const char*getstr()constreturn str;10. private:11. int len;12. char *str;13. ;14. String:String()15. 16. cout默认构造函数n;17. len = 0;18. str=new char1;19. str0=0;20. 21. String:String(const char*const ch)22. 23. cout构造函数n;24. len = strlen(ch);25. str = new charlen+1;26. for(int i=0;ilen;i+)27. stri = chi;28. strlen=0;29. 30. int _tmain(int argc, _TCHAR* argv)31. 32. String s1;33. couts1:s1.getstr()t共s1.getlen()字符endl;34. String s2(study);35. couts2:s2.getstr()t共s2.getlen()字符endl;36. char *temp = help me;37. String s3(temp);38. couts3:s3.getstr()t共s3.getlen()字符len)4. return strlen-1;5. else6. return strlength7. 复制代码第1行重载了属于String类的下标运算符函数operator,该函数有一个整型参数,即数组的下标length,该下标值会传递到函数体中进行判断,假如下标超过了数组长度,那么返回数组长度-1,也就是最后一个可见字符,假如该下标长度不超过数组长度,那么返回该下标的数组元素。这样,就算用户超出数组长度地输入或者输出一个字符,如:couts999,由于超过数组长度返回的是最后一个字符,因此不会出现在超出数组末尾修改数据的现象,这无形中就提高了代码的安全性。增加限制数组越界功能的String类的例子如下所示。限制数组越界。程序代码如下: 1. #include 2. using namespace std;3. class String4. 5. public:6. String();7. String(const char *const ch);8. char&operator(int length); /按引用返回的重载下标运算符函数9. int getlen()constreturn len;10. c
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号