(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;
}