#include <iostream>
using std::endl;
using std::cout;
using std::cin;
using std::ostream;
using std::istream;
//////string 헤더 구현////////
class string{ //string객체 선언
int len; //길이
char* str; //멤버 변수
public:
string(const char* s=NULL); //생성자
string(const string& s); //깊은복사생성자
~string(); //소멸자
string& operator=(const string& s); //깊은 복사 대입연산자
string& operator+=(const string& s); //리턴타입이 참조
bool operator==(const string& s); //스트링 대조를 연산하기 위한 함수
string operator+(const string& s); //리턴타입이 참조가 아님.
friend ostream& operator<<(ostream& os, const string& s); //출력을 위한 연산자 오버로딩
friend istream& operator>>(istream& is, string& s); //입력을 위한 연산자 오버로딩
};
string::string(const char* s){
len=(s!=NULL ? strlen(s)+1 : 1); // Null문자 계산하지 않으므로 +1
//Null이 아니면 s의 길이 +1, Null이면 1만큼 공간할당
str=new char[len]; //동적할당
if(s!=NULL) //Null이 아니면 복사
strcpy(str, s);
}
string::string(const string& s){ //깊은 복사 생성자
len=s.len;
str=new char[len];
strcpy(str, s.str);
}
string::~string(){ //소멸자. 위에서 +1된 메모리 공간
delete []str;
}
string& string::operator=(const string& s){ //깊은 복사 대입연산자. 리턴 타입은 참조
delete []str;
len=s.len;
str=new char[len];
strcpy(str, s.str);
return *this; //참조로 리턴해야 함
}
string& string::operator+=(const string& s){
len=len+s.len-1; //Null의 공간을 지운다.
char* tStr=new char[len]; //동적할당
strcpy(tStr, str); //복사
delete []str; //이전 공간을 제거
strcat(tStr, s.str); //s.str의 내용을 tstr뒤에 추가한다.
str=tStr; //다시 str에 초기화
return *this;
}
bool string::operator==(const string& s){ //문자열을 비교
return strcmp(str, s.str)? false:true; //문자열이 같으면 true, 다르면 false
}
string string::operator+(const string& s){ //문자열을 추가
char* tStr=new char[len+s.len-1];
strcpy(tStr, str); //문자열 복사
strcat(tStr, s.str); //문자열 추가
string temp(tStr);
delete []tStr;
return temp;
}
ostream& operator<<(ostream& os, const string& s){ //문자열을 출력하기 위해
os<<s.str;
return os;
}
istream& operator>>(istream& is, string& s){ //문자열을 입력받기 위해
char str[100];
is>>str;
s=string(str); //임시객체 만들어서 대입연산자.
return is;
}
// main 함수는 StringClass1.cpp와 같다.
int main()
{
string str1="Good "; //str1 객체생성(good으로 초기화)
string str2="morning"; //str2 객체생성(morning으로 초기화)
string str3=str1+str2; //두 객체를 합쳐서 str3에 대입
cout<<str1<<endl; //출력
cout<<str2<<endl;
cout<<str3<<endl;
str1+=str2; //str1에 str2내용 추가
if(str1==str3) { //str1과 str3의 내용 비교.
cout<<"equal!"<<endl;
}
string str4; //객체 생성
cout<<"문자열 입력: ";
cin>>str4;
cout<<"입력한 문자열: "<<str4<<endl;
return 0;
}