2020-09-10刷题

  1. 面试常问题-String类的实现
#include <iostream>
#include <string.h>
using namespace std;
class MyString
{
public:
	char *m_str;
	int m_size;
public:
//默认构造函数
	MyString(const char *str){
    if(str == NULL){
		m_str = new char[1];
		m_str[0] = '\0';
		m_size = 0;
    }//if
    else{
		m_size = strlen(str);
		m_str = new char[m_size+1];
		strcpy(m_str,str);
    }//else
}


	//赋值构造函数
	MyString(const MyString &str)
	{
		m_size = str.m_size;
		m_str = new char[m_size+1];
		strcpy(m_str,str.m_str);
	}
	//析构函数
	~MyString()
	{
		delete[] m_str;
	}
	//字符串连接
	MyString operator+(const MyString &str)
	{
		MyString newStr(NULL);
		//释放原来的空间
		delete[] newStr.m_str;
		newStr.m_size = m_size+str.m_size;
		newStr = new char[newStr.m_size+1];
		strcpy(newStr.m_str,m_str);
		strcpy(newStr.m_str+m_size,str.m_str);
		return  newStr;
	}
	//字符串赋值
	MyString &operator=(const char *str)
	{
		if(str == m_str)
			return *this;
		//释放原来的空间
		delete[] m_str;
		m_size = strlen(str);
		m_str = new char[m_size+1];
		strcpy(m_str,str);
		return *this;
	}

	//字符串赋值
	MyString &operator=(const MyString &str)
	{
		if(str.m_str == m_str)
			return *this;
		//释放原来的空间
		delete[] m_str;
		m_size = str.m_size;
		m_str = new char[m_size+1];
		strcpy(m_str,str.m_str);
		return *this;
	}
	//判断两个字符串是否相等
	bool operator==(const MyString &str)
	{
		if(strcmp(str.m_str,m_str) == 0)
			return true;
		return false;
	}
	//获取字符串长度
	int length()
	{
		return m_size;
	}
	//求子字符串
	MyString substr(int start,int n)//从start开始,共找n个
	{
		MyString newStr(NULL);
		delete[] newStr.m_str;
		newStr.m_str = new char[n+1];
		for(int i=0;i<n;i++)
		{
			newStr.m_str[i] = m_str[start+i];
		}
		newStr.m_str[n] = '\0';
		newStr.m_size = n;
		return newStr;
	}
	friend ostream & operator<<(ostream &o, const MyString &str){
		o<<str.m_str;
	    return o;
	}

};
int main()
{
	MyString ms1("Hello"); 
	MyString ms2(ms1);
	MyString ms3 = ms1+ms2;
	
	cout<<ms3<<endl;

	system("pause");
	return 0;
}
  1. strcpy函数的实现
    代码:
#include <iostream>
using namespace std;
char *MyStrcpy(char *desstr,char *srcstr)
{
	if(srcstr==nullptr || desstr==nullptr) return nullptr;
	char *pTemp = srcstr;
	char *pNode = desstr;
	while(1)
	{
		*pNode = *pTemp;
		if(*pNode != '\0')
		{
			pTemp++;
			pNode++;
		}
		else
		{
			break;
		}
	}
	return desstr;
}
int main()
{
	char *p1 = new char[3];
	p1[0] = 'l';
	p1[1] = 'u';
	char *p2 = "da";
	char *p = MyStrcpy(p1,p2);
	while(*p != '\0')
	{
		cout<<*p;
		p++;
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值