面试题(四)(编程题)

(1)如下为类型CMyString的声明,请为该类型添加赋值运算符函数

class CMyString
{
publice:
	CMyString(char* pData = nullptr);
	CMyString(const CMyString& str);
	~CMyString(void);
private:
	char* m_pData;
}

考察点:

  • 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用
  • 是否把传入的参数的类型声明为常量引用
  • 是否释放实例自身已有的内存
  • 判断传入的参数和当前的实例是不是同一个实例

解答:

CMyString& CMyString::operator=(const CMyString &str)
{
	if(this ==&str){
		return *this;
	}
	delete []m_pData;
	m_pData=nullptr;
	m_pData=new char[strlen(str.m_pData)+1];
	strcpy(m_pData,str.m_pData);
	return *this;
}

(2)设计一个类,我们只能生成该类的一个实例
考察点:单例模式的设计
解答:

public sealed class Singleton
{
	Singleton()
	{
	}
	public static Singleton Instancce
	{
		get
		{
			return Nested.instance;
		}
	}
	class Neated
	{
		static Nested()
		{
		}
		internal static readonly Singleton instance = new Singleton()
	}
}

(3)判断数组中的重复数字
排序判断,判断是否在多个位置出现

bool a(int number[],int length,int* b)
{
	if number==nullptr || length<=0)
	{
		return false;
	}
	for(int i=0;i<length;++i)
	{
		if(number[i]<0 || number[i]>length-1){
			return false;
		}
		for(int i=0;i<length;++i)
		{
			while(number[i]!=i)
			{
				if(number[i]==number[number[i]])
				{
					*b=number[i];
					return true;
				}
				int temp=number[i];
				number[i]=number[temp];
				number[temp]=temp;
			}
		}
}

(4)不修改数组找到重复的数字
思路:将原数组复制到辅助数组中,复制的数字是m,在辅助数组中下标为m的位置上

int get(const int* number,int length)
{
	if number==nullptr || length<=0)
	{
		return -1;
	}
	int start=-1;
	int end=length-1;
	while(end>=strt)
	{
		int middle=((end-start)>>1)+start;
		int count=countRange(number,length,start,middle);
		if(end==start)
		{
			if(count>1)
			{
				return start;
			}
			else{
				break;
			}
		if(count>(middle-start+1)){
			end=mile;
		}
		else{
			start=middle+1;
		}
	}
	return -1;
}

int countRange(const int* number,int length,int start,int end)
{
	if(number==nullptr)
	{
		return 0;
	}
	int count=0;
	for(int i=0;i<length;i++){
		if(number[i]>=start&&number[i]<=end){
			 ++count;
		 }
	}
	return count;
}

猜你喜欢

转载自blog.csdn.net/m0_64596200/article/details/126808982