面试题1:
题目描述:
如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
private:
char* m_pData;
};
思路: 现代写法,传一个临时参数tmp,然后将tmp的m_pData值与this指针指向的值进行交换,就实现了运算符的重载。
注:tmp出了作用域会自动调用析构函数释放,所以当tmp区域与this指向的为同一区域时,tmp释放,则this指针
指向的区域也释放了,就会出现问题,所以需要加上条件(this!=&str)。
代码:
CMyString& CMyString::operator=(const CMyString& str) { if (this != &str) { CMyString temp(str); char* data = temp.m_pData; temp.m_pData = this->m_pData; this->m_pData = data; } return *this; }
面试题3:
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入描述:
array: 待查找的二维数组
target:查找的数字
输出描述:
查找到返回true,查找不到返回false
思路:从二维数组的左下角开始找,若当前位置比target小,则向右移;反之,向上移动。
代码:
class Solution { public: bool Find(vector<vector<int> > array,int target) { int row =array.size(); //行 int col=array[0].size(); //列 int x=row-1; //横坐标 int y=0; //纵坐标 while(x>=0 && y<col) { if(array[x][y]>target) //当前位置值>target,上移 x--; else if(array[x][y]<target) //当前位置值<target,右移 y++; else return true; } return false; } };
面试题4:
题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:先计算空格个数,str原长及新长度,然后从后向前拷贝,避免内存覆盖
代码:
//假定length为系统规定字符串输出的最大长度,固定为一个常数 class Solution { public: void replaceSpace(char *str,int length) { if(str==NULL||length<0)//当str为空或最大长度非法,则返回 { return; } int len=0;//str的长度 int blank=0;//空格的个数 int i=0; while(str[i]!='