模拟实现简单Mystring
来源:互联网 发布:周扬青买化妆淘宝店名 编辑:程序博客网 时间:2024/06/05 04:02
#pragma once#include <iostream>#include <stdio.h>#include <assert.h>using namespace std;class MyString{ //############################################################ //传统写法 //############################################################public: MyString(char* str) :_str( new char[strlen(str)+1])//必须开辟新空间,为‘\0’开辟一个字节 { assert(str); for (size_t i = 0; i <= strlen(str); i++) { _str[i] = str[i]; } //strcpy(_str, str); } MyString(const MyString& s) :_str(new char[strlen(s._str)+1])//传引用,少一层拷贝 { for (size_t i = 0; i <= strlen(s._str); i++) { _str[i] = _str[i]; } //strcpy(_str, s._str); } MyString& operator=(const MyString& s) { if (this != &s) { delete[]_str; _str = new char[strlen(s._str) + 1]; strcpy(_str, s._str); //首先释放空间,因为两个字符串的内存可能不 同,导致溢出或泄露 //开辟与要赋值的字符串相同的空间//赋值 } return *this; } //有返回值 并引用,支持连续赋值, //还有const修饰,防止字符串被改变 //传引用,提高效率(少一层拷贝构造) //############################################################ //现代写法 //############################################################ MyString(const MyString& s) :_str(NULL)//传引用,少一层拷贝 { MyString temp(s._str); swap(_str, temp._str); } MyString& operator=(MyString s)//拷贝构造s { if (this != &s) { swap(_str, s._str); } return *this; } MyString& operator=(const MyString& s)//拷贝构造s { if (this != &s) { MyString temp(s._str); swap(_str, temp._str); } return *this; } //#################################################### char& operator[](const size_t num) { assert(num<strlen(_str)); return _str[num]; } bool operator>(const MyString&s) //s1="hello" s2="world" { assert(&s); const char* str1 = _str; const char* str2 = s._str; while (*str1 && *str2) { if (*str1 > *str2) return true; else if (*str1 < *str2) return false; else { str1++; str2++; } } if (*str1) return true; else return false; } bool operator==(const MyString&s) //s1="hello" s2="world" { assert(&s); const char* str1 = _str; const char* str2 = s._str; while (*str1 && *str2) { if (*str1 != *str2) return false; else { str1++; str2++; } } if (*str1 =='\0' && *str2=='\0') return true; else return false; } ~MyString() { delete[]_str; _str = NULL;//防止野指针,不指空也无所谓,已经被析构 }private: char* _str;};
阅读全文
0 0
- 模拟实现简单Mystring
- 模拟实现MyString
- C++ MyString类的简单实现
- mystring实现
- MyString实现
- MyString实现
- MyString的实现
- MyString类实现
- c++实现mystring
- C++ 实现mystring类型
- MyString类的实现
- mystring类的实现
- myString
- MyString
- Mystring
- MyString
- MyString
- 实现MyString类(二)—MyString.cpp实现
- TP5"踢飞我", 带你飞 ~~ 导入\导出
- Windows Server 2008r2配置主DNS域名服务器
- Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)
- Java远程连接Redis却返回timed out
- STM32初识——中断初始化过程(by woody)
- 模拟实现简单Mystring
- 多态 多态中的成员(成员变量、构造方法、成员方法、静态方法)访问特点
- markdown
- HBase优化之—在建表时预先分regions 代码
- 水题 第五站 HDU Ignatius and the Princess IV
- LINUX网络命令
- mongoose
- oracle ebs应用产品安全性-交叉验证规则
- 大型网站服务器的架构