#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class MyString
{
public:
MyString::MyString();         //无参构造
MyString(const char* str );     //默认参数
MyString(const MyString& other);   //拷贝构造
MyString& operator=(const MyString& other);  //重载等号(参数不同)
MyString& operator=(const char* str);      //重载等号(参数不同)
~MyString();              //析构函数
char& operator[](unsigned int index);      //重载[]号 MyString& operator+=(const MyString& other);  //重载+=号
friend MyString operator+(const MyString& s1, const MyString& s2);  //重载加号;用全局的友元函数
friend ostream& operator<<(ostream& os, const MyString& str);      //重载左移操作符;用全局函数
  
friend istream& operator>>(istream& is, MyString& str);          //重载右移操作符,用全局函数
private:
char* m_str;
}; MyString::MyString()
{
m_str = new char[];
m_str = '\0';
} MyString::MyString(const char* str) //默认参数
{
if (str == NULL)
{
m_str = new char[];
m_str = '\0'; }
else
{
int len = strlen(str);
m_str = new char[len + ];
strcpy(m_str, str);
}
} MyString::MyString(const MyString& other)
{
int len = strlen(other.m_str);
m_str = new char[len + ];
strcpy(m_str, other.m_str);
} MyString& MyString::operator=(const MyString& other)
{
if (&other == this)
return *this;
if (m_str != NULL)
{
delete[]m_str;
} int len = strlen(other.m_str);
m_str = new char[len + ];
strcpy(m_str, other.m_str);
return *this;
} MyString& MyString::operator=(const char* str)
{
if (m_str != NULL)
{
delete[]m_str;
} if (str == NULL)
{
m_str = new char[];
m_str = '\0';
}
else
{
int len = strlen(str);
m_str = new char[len + ];
strcpy(m_str, str);
} return *this;
}
MyString::~MyString()
{
if (m_str != NULL)
{
delete[]m_str;
m_str = NULL;
}
}
char& MyString::operator[](unsigned int index)
{
unsigned int len = strlen(m_str);
if (index > len)
return m_str[len]; return m_str[index];
} MyString& MyString::operator+=(const MyString& other)
{
int len = strlen(m_str) + strlen(other.m_str);
char *newstr = new char[len + ];
strcpy(newstr, m_str);
strcat(newstr, other.m_str); if (m_str != NULL)
{
delete[]m_str;
}
m_str = newstr; return *this;
}
MyString operator+(const MyString& s1, const MyString& s2)
{
int len = strlen(s1.m_str) + strlen(s2.m_str);
char *newstr = new char[len + ];
strcpy(newstr, s1.m_str);
strcat(newstr, s2.m_str); MyString My(newstr); return My;
}
ostream& operator<<(ostream& os, const MyString& str)
{
os << str.m_str << endl;
return os;
}
istream& operator>>(istream& is, MyString& str)
{
char newstr[];
is >> newstr;
int len = strlen(newstr);
if (str.m_str != NULL)
{
delete []str.m_str;
}
str.m_str = new char[len + ];
strcpy(str.m_str, newstr); return is;
} //测试代码
void test11()
{
MyString m1;
MyString m2("nihao");
MyString m3(m2);
cout << m2;
cout << m3;
m1 = m2 + m3;
cout << m1;
m1 += m3;
cout << m1[-] << endl;
cin >> m3;
cout << m3; } int main()
{ test11(); system("pause");
return EXIT_SUCCESS;
}

自实现部分string类的功能的更多相关文章

  1. String类常用功能

    String类常用功能 判断: boolean equals(Object obj) boolean equalsIgnoreCase(String str) //忽略大小写 boolean star ...

  2. String类的功能

    String类              标红的为较少出现的 1.判断功能 boolean equals(Object obj) :比较字符串内容是否相同,区分大小写 boolean equalsIg ...

  3. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  4. 关于如何来构造一个String类

    今天帮着一位大二的学弟写了一个String的类,后来一想这个技术点,也许不是什么难点,但是还是简单的记录一些吧! 为那些还在路上爬行的行者,剖析一些基本的实现..... 内容写的过于简单,没有涉及到其 ...

  5. VC++ 标准C++中的string类的用法总结

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

  6. c++中string类的详解

    ,<时返回-1,==时返回0  string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...

  7. 标准C++中string类的用法

    转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...

  8. 标准C++中的string类的用法总结(转)

    http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的 ...

  9. C++中的string类(2)

    相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...

随机推荐

  1. NHibernate官方文档中文版——事务和并发(Transactions And Concurrency)

    NHibernate本身并不是一个数据库.它是一个轻量级的对象-关系映射工具.因此,它的事务管理代理给对应的数据库连接.如果这个连接代理了一个分布式的事务,ISession管理的操作就会自动成为整个分 ...

  2. HDU 4634 Swipe Bo (2013多校4 1003 搜索)

    Swipe Bo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. (转)c#中判断是不是数字和字母

    一.判断字母string str = Console.ReadLine();if (char.isLetter(str)){ }else if (char.IsDigit(str)){ }if(ch& ...

  4. [Android实例] 推荐给你们一个好用的ListView、RecyclerView适配器

    https://github.com/vihuela/RecyclerViewHelpper 如果用过RecyclerView的人都知道,高度不会包裹,然后写法好像也不是很简洁,甚至点击事件不好设 置 ...

  5. etcd,Docker问题汇总

    单节点etcd publish error 正在愉快的进行jenkins流程,突然发现etcd连接不上去了.重新reboot后发现日志publish error Oct :: k8s-master e ...

  6. .NET Oracle Developer的福音——ODP.NET Managed正式推出

    .NET Oracle Developer的福音--ODP.NET Managed正式推出   在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServ ...

  7. [转]Sql Server 主从数据库配置

    本文转自:http://www.cnblogs.com/yukaizhao/archive/2010/06/02/sql-server-master-slave-mode.html 网站规模到了一定程 ...

  8. AHB总线RAM Verilog实例

    //*************************************************************************** // Copyright(c)2017, L ...

  9. 关于typedef的用法总结(zz)

    不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多 的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一 ...

  10. CCControlExtension/CCControlButton

    #ifndef __CCCONTROL_BUTTON_H__ #define __CCCONTROL_BUTTON_H__ #include "CCControl.h" #incl ...