自定义的string
来源:互联网 发布:为什么我没有淘宝客贷 编辑:程序博客网 时间:2024/05/02 01:04
/****************************************************************************************************************
* string class. 仿真std::string
* SDU. All Rights Reserved.
* Author: Guangcong Liu
****************************************************************************************************************
*/
#include <cstddef>
#include <cassert>
#include <cstring>
class string;
string operator+(const string&, const string&);
bool operator==(const string&, const string&);
class string{
public:
string(const char* = 0);
string(const string&);
~string();
string& operator=(const string&);
string& operator=(const char*);
string& operator+=(const string&);
string& operator+=(const char*);
size_t size() const;
char& operator[](size_t);
const char& operator[](size_t) const;
const char* c_str() const;
private:
char* _str;
};
string::string(const char* str)
{
if(str == 0)
{
_str = new char[1];
_str[1] = '/0';
}
else
{
_str = new char[strlen(str) + 1];
strcpy(_str, str);
}
}
string::string(const string& other)
{
_str = new char[strlen(other._str) + 1];
strcpy(_str, other._str);
}
string::~string()
{
delete [] _str;
}
string& string::operator=(const string& rhs)
{
if(&rhs != this)
{
delete [] _str;
_str = new char[strlen(rhs._str) + 1];
strcpy(_str, rhs._str);
}
return *this;
}
string& string::operator=(const char* rhs)
{
if(rhs != _str)
{
delete [] _str;
_str = new char[strlen(rhs) + 1];
strcpy(_str, rhs);
}
return *this;
}
string& string::operator+=(const string& rhs)
{
char * ori = _str;
_str = new char[strlen(ori) + strlen(rhs._str) + 1];
strcpy(_str, ori);
strcat(_str, rhs._str);
delete [] ori;
return *this;
}
string& string::operator+=(const char* rhs)
{
if(rhs)
{
char * ori = _str;
_str = new char[strlen(ori) + strlen(rhs) + 1];
strcpy(_str, ori);
strcat(_str, rhs);
delete [] ori;
}
return *this;
}
string operator+(const string& lhs, const string& rhs)
{
string temp = lhs;
temp += rhs;
return temp;
}
bool operator==(const string& lhs, const string& rhs)
{
if(strcmp(lhs.c_str(), rhs.c_str()) == 0) return true;
return false;
}
size_t string::size() const
{
return strlen(_str);
}
char& string::operator[](size_t i)
{
return _str[i];
}
const char& string::operator[](size_t i) const
{
return _str[i];
}
const char* string::c_str() const
{
return _str;
}
- 自定义的string
- 自定义的string类
- 自定义string的小例子
- 自定义String
- 自定义string
- C++的自定义的string类
- 实现一个自定义的String类
- 自定义string类的简单实现
- 注意string自定义的赋0截断
- 编写一个自定义的String类
- std::string 的 replace函数的自定义实现
- 扩展Struts2--自定义String和XML格式的Result
- 如何给自定义控件加string[]类型的属性
- 扩展Struts2--自定义String和XML格式的Result
- 扩展Struts2--自定义String和XML格式的Result收藏
- 扩展Struts2--自定义String和XML格式的Result
- 自定义实现类似Java的Integer.parseInt(String str)函数
- 根据C++ Primer 5th编写的自定义String类
- 通过超链接提交表单
- 使用Gflags来检测heap问题
- tomcat内存溢出和自启动
- SHGetFileInfo函数详解
- 使用netsh在命令行下设置IP
- 自定义的string
- MaMa
- Linux上JAVA虚拟机的solution
- 郭德纲经典语录
- getParameter和getAttribute
- USB转COM 100%兼容 双芯片PL2303驱动
- 四大图像库的使用感受:OpenCV/FreeImage/CImg/CxImage
- ASP连接数据库ACCESS2007的代码
- PAAS推进SAAS时代