不知道为什么这次面360什么基础知识都没问,直接就让写了代码,第一个是实现一个string类,当时写的不怎么样,面试结束之后自己又写了一下,应该还是有bug的
<pre name="code" class="cpp">#include<iostream>
using namespace std;
class Cstring
{
public:
Cstring(char* src=NULL);
Cstring& operator=(const Cstring& src);
//Cstring operator=(const Cstring src);
bool operator==(const Cstring src);
Cstring& operator+(const Cstring& src);
int size();
Cstring& append( const Cstring& a,int start = 0, int end = 0);
char* c_str(const Cstring src);
~Cstring();
private:
int length;
char* val;
};
<pre name="code" class="cpp">#include"CppString.h"
#define _CRT_SECURE_NO_WARNINGS
Cstring::Cstring(char* src)
{
if (src == NULL)
{
val = 0;
}
else
{
val = new char[strlen(src) + 1];
strcpy(val, src);
length = strlen(src);
}
}
int Cstring::size()
{
int t = length;
return length;
}
Cstring& Cstring::append(const Cstring& a, int start , int end )
{
Cstring newstring;
if (!a.val)
{
newstring = *this;
newstring.length = length;
}
else if (!val)
{
newstring.val = new char[end-start+1];
for (int i = start; i < end; i++)
{
newstring.val[i - start] = a.val[i];
}
newstring.val[end - start] = NULL;
newstring.length = a.length;
}
else
{
newstring.val = new char[a.length + end-start + 1];
strcpy(newstring.val, val);
for (int i = start; i < end; i++)
{
newstring.val[length + i - start] = a.val[i];
}
newstring.val[length + end - start] = NULL;
newstring.length = end-start + length;
}
delete[] val;
val = new char[strlen(newstring.val) + 1];
strcpy(val, newstring.val);
length = newstring.length;
return *this;
}
Cstring& Cstring::operator+(const Cstring& src)
{
Cstring newstring;
if (!src.val)
{
newstring.val = new char[strlen(val) + 1];
strcpy(newstring.val, val);
newstring.length = length;
}
else if (!val)
{
newstring.val = new char[strlen(src.val) + 1];
strcpy(newstring.val, src.val);
newstring.length = src.length;
}
else
{
newstring.val = new char[strlen(val) + strlen(src.val) + 1];
strcpy(newstring.val, val);
strcat(newstring.val, src.val);
newstring.length = length + src.length;
}
//delete[] val;
val = new char[strlen(newstring.val)+1];
strcpy(val, newstring.val);
length = newstring.length;
return *this;
}
char* Cstring::c_str(const Cstring src)
{
return val;
}
Cstring& Cstring::operator=(const Cstring& src)
{
delete[] val;
if (!src.val)
{
val = NULL;
length = 0;
}
else
{
val = new char[src.length+1];
strcpy(val, src.val);
length = src.length;
}
return *this;
}
bool Cstring::operator==(const Cstring src)
{
if (strcmp(val, src.val))
return true;
else
return false;
}
Cstring::~Cstring()
{
delete[] val;
}
第二道题是一道外排序的问题,4g内存排序100g的文件,多路归并排序就可以解决