c++面接でよくある問題のstringクラスの実現

2212 ワード

#include #include #include using namespace std; class MyString {
public: MyString(); MyString(const char* pcStr); MyString(const MyString& oOther); ~MyString(); MyString& operator=(const MyString& oOther); MyString operator+(const MyString& oOther); char operator[](const unsigned int index); int operator==(const MyString& oOther); friend ostream& operator< private: char *m_pcData;
};
//デフォルトのコンストラクション関数MyString::MyString(){m_pcData=new char[1];m_pcData='0';}//const charを使用してMyStringを初期化します::MyString(const char*pcStr){if(NULL==pcStr){m_pcData=new char[1];*m_pcData='0';}else { int ilen = strlen(pcStr); m_pcData = new char[ilen + 1]; strcpy(m_pcData, pcStr); } }//コピーコンストラクタMyString::MyString(const MyString&oOther){int len=strlen(oOther.m_pcData);m_pcData=new char[len+1];strcpy(m_pcData,oOther.m_pcData);}
int MyString::operator==(const MyString& oOther) { int result = strcmp(m_pcData, oOther.m_pcData); return result; }//割り当てオペレータMyString&MyString::operator=(const MyString&oOther){if(this!=&oOther){
    delete[] m_pcData;
    m_pcData = new char[strlen(oOther.m_pcData) + 1];
    strcpy(m_pcData, oOther.m_pcData);
}
return *this;

//////リロード演算子+MyString MyString::operator+(const MyString&oOther){MyString newString;if(!oOOOther.m_pcData)newString=this;else if(!m_pcData)newString=oOther;else{newString.m_pcData=new char[strlen(m_pcData)+strlen(oOther.m_pcData)+1;strcppy(newString.m_pcData)+1];strcppy(newString.m_pcData)+1;strcppy(newString.m_pcm_pcData)+pM,m_pcData;strcat(newString.m_pcData,oOther.m_pcData);return newString; }//下付き演算子char MyString::operator[](const unsigned int index){returnm_pcData[index];//構造関数MyString::~MyString(){delete[]m_pcData;}//MyString oString0 = "hello,world"; MyString oString1(pcStr); MyString oString2 = oString1; MyString oString3; oString3 = oString1; MyString oString4 = oString3 + oString1; if(0 == (oString1 == oString2)) cout<
}