自实现部分string类的功能
#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类的功能的更多相关文章
- String类常用功能
String类常用功能 判断: boolean equals(Object obj) boolean equalsIgnoreCase(String str) //忽略大小写 boolean star ...
- String类的功能
String类 标红的为较少出现的 1.判断功能 boolean equals(Object obj) :比较字符串内容是否相同,区分大小写 boolean equalsIg ...
- 标准C++中的string类的用法总结
标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...
- 关于如何来构造一个String类
今天帮着一位大二的学弟写了一个String的类,后来一想这个技术点,也许不是什么难点,但是还是简单的记录一些吧! 为那些还在路上爬行的行者,剖析一些基本的实现..... 内容写的过于简单,没有涉及到其 ...
- VC++ 标准C++中的string类的用法总结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
- c++中string类的详解
,<时返回-1,==时返回0 string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...
- 标准C++中string类的用法
转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...
- 标准C++中的string类的用法总结(转)
http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的 ...
- C++中的string类(2)
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯 ...
随机推荐
- 8VC Venture Cup 2016 - Final Round D. Preorder Test 二分 树形dp
Preorder Test 题目连接: http://www.codeforces.com/contest/627/problem/D Description For his computer sci ...
- kindeditor在Firefoxt 和 Chrome 下不能取到值的解决方法
默认form模式提交数据的时候,在ie下用户不需要进行任何设置和调用sync函数,因为editor已经自动调用,但是在firefox和 chrome下,用户如果不手动调用sync函数,editor的数 ...
- Delphi DevExpress下载
http://download.csdn.net/detail/wozengcong/8395285#comment
- js模板引擎-art-template常用
art-template javascript 模板引擎 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出HTML 流程控制 遍历 调用自定义函数方法 子模板引入 基础数据渲染 一.引 ...
- ScheduledExecutorService run方法要加入try catch
原文:http://www.andyqian.com/2018/03/07/java/javaSmallDetail/ 前言 今天我们一起来做个简单有趣的实验.熟悉Java的童鞋,对Scheduled ...
- express结合EJS模板渲染HTML
注意:以下是在Windwo环境下 运行: npm install ejs 然后你的目录node_modules下将增加ejs文件夹 app.js var express = require(" ...
- jstack_查看当前进程及所属线程执行情况
C:\Program Files\Java\jdk1.7.0_45\bin\jstack.exe 1.任务管理器:进程选择PID 2.命令行执行 cd C:\Program Fi ...
- Flash&Flex大全
官方在线帮助(没标英文的都是中文) 用于 Adobe Flash Platform 的 ActionScript 3.0 参考 更多参考使这样的链接下载离线版:http://help.adobe.co ...
- Ajax和Jsonp实践
之前一直使用jQuery的ajax方法,导致自己对浏览器原生的XMLHttpRequest对象不是很熟悉,于是决定自己写下,以下是个人写的deom,发表一下,聊表纪念. Ajax 和 jsonp 的j ...
- Swift 版本号非常好的卡片切换效果基于ZLSwipeableView(相似于[陌陌点点][探探])
这是我在简书的文章. http://www.jianshu.com/p/734962c9bbed