• string_自定义


    string类的基本操作

    // Study.cpp: 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <vector>
    #include <unordered_map>
    #include <unordered_set>
    #include <queue>
    #include <string>
    #include <algorithm>
    #include <sstream>
    using namespace std;
    
    class myString;
    class myString {
    	friend ostream& operator<<(ostream& out, const myString& ss);
    public:
    	//普通构造函数
    	myString(const char* word=nullptr)
    	{
    		if (word == nullptr)
    		{
    			p = new char;
    			//需要判断是否成功分配内存  p == nullptr ??
    			if (p == nullptr)
    			{
    				cout << "申请内存失败 " << endl;
    				return;
    			}
    			*p = '';
    			length = 0;
    		}
    		else
    		{
    			length = strlen(word);
    			p = new char[length+1];
    			//需要判断是否成功分配内存  p == nullptr ??
    			if (p == nullptr)
    			{
    				cout << "申请内存失败 " << endl;
    				return;
    			}
    			strcpy(p, word);
    		}
    
    
    	}
    	//拷贝构造函数
    	myString(const myString & ss)
    	{
    		p = new char [ss.length + 1];
    		//需要判断是否成功分配内存  p == nullptr ??
    		if (p == nullptr)
    		{
    			cout << "申请内存失败 " << endl;
    			return;
    		}
    		strcpy(p, ss.p);
    		length = ss.length;
    	}
    	myString& operator=(const myString &ss)
    	{
    		//检查自赋值
    		if (this == &ss)
    			return *this;
    
    		//删除原来的内存资源
    		delete []p;
    
    		length = ss.length;
    		p = new char[length + 1];
    		//需要判断是否成功分配内存  p == nullptr ??
    		if (p == nullptr)
    		{
    			cout << "申请内存失败 " << endl;
    			return *this;
    		}
    		strcpy(p, ss.p);
    		return *this;
    	}
    
    	~myString()
    	{
    		delete []p;
    	}
    private:
    	char* p;
    	int length;
    };
    ostream& operator<<(ostream& out, const myString& ss)
    {
    	out << (ss.p);
    	return out;
    }
    
    
    int main()
    {
    
    	myString a("Hello World !");
    	myString b("Let's go ");
    	cout << "a : "<< a << endl;
    	cout << "b : " << b << endl;
    	myString c(b);
    	cout << "c : " << c << endl;
    	a = b;
    	cout << "a : " << a << endl;
    
    	string x("X");
    	cout << x.substr(0, 2) << endl;
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表
    C#中 @ 的3种用途
    有关于 使用 命名管道 进行网络 进程间通信 的资料收集
    MySql LAST_INSERT_ID 【插入多条数据时】
    两个“不合理继承 ”的判定标识
    MYSQL 函数 字符串到整数
    Spring MVC 对于@ModelAttribute 、@SessionAttributes 的详细处理流程
    重构,拥有多个构造函数(重载)的类
    vue二级联动select
    gulp.dest用法详解
  • 原文地址:https://www.cnblogs.com/Oscar67/p/9562444.html
Copyright © 2020-2023  润新知