Soft Ware/C++ 언어!!

string 구현하기 ~~!!

달려가보자 2012. 2. 5. 11:27


#include <iostream>
using namespace std;
class Str
{
private:
 char *buf; //동적 메모리 할당을 위한 포인터
 int size;
 
public:
 Str(); //디폴트 생성자
 Str(const char *ptr); //문자열로부터 생성
 Str(const Str &Other); //복사 생성자
 ~Str(); //파괴자

 Str &operator =(const Str &Other);
 const Str operator +(Str &Other) const;//연결 연산자
 const Str operator +(const char *ptr) const { return *this+Str(ptr); }

 int length() const { return strlen(buf); }
 friend ostream &operator <<(ostream &c, const Str &S);//출력 연산자
};
//출력 연산자
ostream &operator <<(ostream &c, const Str &S)
{
 c << S.buf;
 return c;
}

//디폴트 생성자
Str::Str()
{
 buf = 0;
 size = 0;
}

//문자열로부터 생성
Str::Str(const char *ptr)
{
 buf = new char [strlen(ptr)+1];
 strcpy(buf,ptr);
}

//복사 생성자
Str::Str(const Str &Other) //

 buf = new char [strlen(Other.buf)+1];
 strcpy(buf,Other.buf);
}

//파괴자
Str::~Str()
{
 delete[] buf;
 buf = NULL;
}

//대입 연산자
Str &Str::operator =(const Str &Other)
{
 if(buf != NULL) delete buf;
 buf = new char [strlen(Other.buf)+1];
 strcpy(buf,Other.buf);

 return (*this); //현재 객체 주소의 값을 반환
}

////연결 연산자6
const Str Str::operator +(Str &Other) const
{
  Str Data;
  Data.buf = new char [strlen(Other.buf)+strlen(this->buf)+1];
  
  strcpy(Data.buf,(this->buf));
  strcpy(Data.buf+strlen(this->buf),Other.buf);
  
  return Data;

}

void main()
{
 Str s1("GJSSM"); // 문자열로 생성자
 Str s2(s1); // 복사 생성자
 Str s3; // 디폴트 생성자
 s3=s1; // 대입 연산자
  
 cout<<"s1="<<s1<<endl;
 cout<<"s2="<<s2<<endl;
 cout<<"s3="<<s3<<endl;

 while(1)
 {
 Str s4 = "GJ";
 Str s5 = "SSM";

 }
 Str s6 = "GJ";
 s6 = s6+"SSM";
 cout<<"s6+SSM="<<s6<<endl;

}