请教三道面试题,求高手解答!
本人完全新手,请高手给解答下
1、程序排错
简单讲一下如何在开发中防止或处理以下错误:
空指针调用,字符串长度超出数组长度,内存忘记释放,用户输入不合理,Windows API调用失败
2、程序逻辑
完成函数void swall(char* str)实现功能,将字符串的前半截和后半截交错排列(假定str长度为偶数)。例如调用前str=”abcdABCD”,则调用后str=”aAbBcCdD”。
3、用C++编写一个类,模仿一个自动售货机。顾客可以选择:购买可乐(3元)、雪碧(2元)或橙汁(4元),结账(输出找零或者不够的差额)。再写一个测试这个类的函数。可以从下面这个类派生。
class IsaleMachine{
public:
virtual bool buyKele()=0;
virtual bool buyXuebi()=0;
virtual bool buyChengzhi()=0;
virtual int pay(int money)=0;
};
[解决办法]
- C/C++ code
//str=”abcdABCD”,则调用后str=”aAbBcCdD”void swall(char* str){ int length = strlen(str); char* temp = new char[length+1]; strcpy(temp, str); temp[length] = '\0'; for (int i=0; i<length; i++) { if (i%2==0) { str[i] = temp[i/2]; } else str[i] = temp[length/2+i/2]; } delete[] temp;}
[解决办法]
空指针调用,字符串长度超出数组长度,内存忘记释放,用户输入不合理,Windows API调用失败
先判断指针是否为空,判断字符串的长度是否超过规定长度, 有new不要忘记delete。有if就要else。
[解决办法]
完成函数void swall(char* str)实现功能,将字符串的前半截和后半截交错排列(假定str长度为偶数)。例如调用前str=”abcdABCD”,则调用后str=”aAbBcCdD”。
这个就简单了吧,