C++ 개념 공부/자료구조
[C++] String 클래스 구현
taene_
2023. 10. 31. 21:11
#include <iostream>
namespace ya
{
class string
{
public:
string(const char* str)
{
int len = strlen(str);
mArr = new char[len + 1];
mLen = len;
memset(mArr, 0, len + 1);
for (int i = 0; i < len; i++)
mArr[i] = str[i];
}
int length()
{
return mLen;
}
const char* c_str()
{
return mArr;
}
char operator[](int idx)
{
return mArr[idx];
}
void operator+=(const char* str)
{
int len = strlen(str);
int len2 = mLen;
char* buff = mArr;
mArr = new char[mLen + len + 1];
mLen = mLen + len + 1;
memset(mArr, 0, mLen);
for (int i = 0; i < len2; i++)
{
mArr[i] = buff[i];
}
for (int i = 0; i < len; i++)
{
mArr[i + len2] = str[i];
}
delete buff;
}
void resize(int size)
{
char* buff = mArr;
mArr = new char[size + 1];
memset(mArr, 0, size + 1);
for (int i = 0; i < size; i++)
{
mArr[i] = buff[i];
}
mLen = size + 1;
delete buff;
}
void resize(int size, char c)
{
char* buff = mArr;
mArr = new char[size + 1];
memset(mArr, 0, size + 1);
if (size + 1 > mLen)
{
for (int i = 0; i < mLen - 1; i++)
{
mArr[i] = buff[i];
}
for (int i = 0; i < size + 1 - mLen; i++)
{
mArr[i + mLen - 1] = c;
}
mLen = size + 1;
}
else
std::cout << "error";
delete buff;
}
bool empty()
{
if (mArr[0] == '\0')
return true;
else
return false;
}
void clear()
{
for (int i = 0; i < mLen; i++)
{
mArr[i] = NULL;
}
}
int find(const char* str)
{
int lenA = strlen(mArr);
int lenB = strlen(str);
bool isSame = false;
int answerIndex = 0;
for (int i = 0; i < lenA; i++)
{
for (int j = 0; j < lenB; j++)
{
if (mArr[i] != str[j])
break;
else
{
int indexA = i;
int indexB = j;
answerIndex = i;
for (int k = 0; k < lenB; k++)
{
if (mArr[indexA++] == str[indexB++])
isSame = true;
else
{
isSame = false;
break;
}
}
if (isSame)
return answerIndex;
else
continue;
}
}
}
return 99999; // Find Nothing, error
}
bool operator==(const char* str)
{
int len = strlen(str);
if (mLen == len + 1)
{
for (int i = 0; i < strlen(str); i++)
{
if (mArr[i] != str[i])
return false;
}
return true;
}
else
return false;
}
private:
char* mArr;
int mLen;
};
}
int main()
{
// STL String Test
std::string stl("Hello");
int len = stl.length();
const char* ptr = stl.c_str();
char ch = stl[1];
stl += "World";
// User-Defined Function String Class
ya::string yam("Hello");
int len2 = yam.length();
const char* ptr2 = yam.c_str();
ch = yam[0];
yam += "World";
yam.resize(12, '+');
yam.resize(10);
bool isSame = (yam == "HelloWorld");
bool isDifferent = (yam == "HelloWorld+");
int a = yam.find("or");
int b = yam.find("rlda");
yam.clear();
bool isEmpty = yam.empty();
return 0;
};