- 面试常问题-String类的实现
#include <iostream>
#include <string.h>
using namespace std;
class MyString
{
public:
char *m_str;
int m_size;
public:
MyString(const char *str){
if(str == NULL){
m_str = new char[1];
m_str[0] = '\0';
m_size = 0;
}
else{
m_size = strlen(str);
m_str = new char[m_size+1];
strcpy(m_str,str);
}
}
MyString(const MyString &str)
{
m_size = str.m_size;
m_str = new char[m_size+1];
strcpy(m_str,str.m_str);
}
~MyString()
{
delete[] m_str;
}
MyString operator+(const MyString &str)
{
MyString newStr(NULL);
delete[] newStr.m_str;
newStr.m_size = m_size+str.m_size;
newStr = new char[newStr.m_size+1];
strcpy(newStr.m_str,m_str);
strcpy(newStr.m_str+m_size,str.m_str);
return newStr;
}
MyString &operator=(const char *str)
{
if(str == m_str)
return *this;
delete[] m_str;
m_size = strlen(str);
m_str = new char[m_size+1];
strcpy(m_str,str);
return *this;
}
MyString &operator=(const MyString &str)
{
if(str.m_str == m_str)
return *this;
delete[] m_str;
m_size = str.m_size;
m_str = new char[m_size+1];
strcpy(m_str,str.m_str);
return *this;
}
bool operator==(const MyString &str)
{
if(strcmp(str.m_str,m_str) == 0)
return true;
return false;
}
int length()
{
return m_size;
}
MyString substr(int start,int n)
{
MyString newStr(NULL);
delete[] newStr.m_str;
newStr.m_str = new char[n+1];
for(int i=0;i<n;i++)
{
newStr.m_str[i] = m_str[start+i];
}
newStr.m_str[n] = '\0';
newStr.m_size = n;
return newStr;
}
friend ostream & operator<<(ostream &o, const MyString &str){
o<<str.m_str;
return o;
}
};
int main()
{
MyString ms1("Hello");
MyString ms2(ms1);
MyString ms3 = ms1+ms2;
cout<<ms3<<endl;
system("pause");
return 0;
}
- strcpy函数的实现
代码:
#include <iostream>
using namespace std;
char *MyStrcpy(char *desstr,char *srcstr)
{
if(srcstr==nullptr || desstr==nullptr) return nullptr;
char *pTemp = srcstr;
char *pNode = desstr;
while(1)
{
*pNode = *pTemp;
if(*pNode != '\0')
{
pTemp++;
pNode++;
}
else
{
break;
}
}
return desstr;
}
int main()
{
char *p1 = new char[3];
p1[0] = 'l';
p1[1] = 'u';
char *p2 = "da";
char *p = MyStrcpy(p1,p2);
while(*p != '\0')
{
cout<<*p;
p++;
}
system("pause");
return 0;
}