[C++ 소스] string 클래스 내부
//mystring.h
#pragma once
#include <iostream>
using std::ostream;
using std::istream;
using std::cin;
using std::cout;
class string
{
char *buf;
public:
string(const char *buf=0);
bool operator==(const string &src)const;
bool operator!=(const string &src)const;
bool operator>(const string &src)const;
bool operator>=(const string &src)const;
bool operator<(const string &src)const;
bool operator<=(const string &src)const;
void view(ostream &os=cout)const;
const char *c_str()const;
friend ostream &operator<<(ostream &os,const string &src);
friend istream &operator>>(istream &is,string &src);
};
///mystring.cpp
#include "mystring.h"
#include <string.h>
string::string(const char *buf)
{
if(buf==0)//입력 인자가 0(널 포인터)일 때
{
this->buf = new char[1];//크기가 1인 버퍼를 생성
strcpy_s(this->buf,1,""); //공백 문자를 대입
}
else//입력 인자가 0(널 포인터)가 아닐 때
{
int len_p1 = strlen(buf)+1; //입력 문자열의 길이 + 1 을 구함
this->buf = new char[len_p1]; //버퍼 생성
strcpy_s(this->buf,len_p1,buf); //문자열 복사
}
}
bool string::operator==(const string &src)const
{
return strcmp(buf,src.buf)==0;
}
bool string::operator!=(const string &src)const
{
return strcmp(buf,src.buf)!=0;
}
bool string::operator>(const string &src)const
{
return strcmp(buf,src.buf)>0;
}
bool string::operator>=(const string &src)const
{
return strcmp(buf,src.buf)>=0;
}
bool string::operator<(const string &src)const
{
return strcmp(buf,src.buf)<0;
}
bool string::operator<=(const string &src)const
{
return strcmp(buf,src.buf)<=0;
}
void string::view(ostream &os)const
{
os<<buf;
}
const char *string::c_str()const
{
return buf;
}
ostream &operator<<(ostream &os,const string &src)
{
src.view(os);
return os;
}
istream &operator>>(istream &is,string &src)
{
char buf[256];
cin>>buf;
delete [] src.buf;
int len_p1 = strlen(buf)+1; //입력 문자열의 길이 + 1 을 구함
src.buf = new char[len_p1]; //버퍼 생성
strcpy_s(src.buf,len_p1,buf); //문자열 복사
return is;
}
//string 클래스 흉내내기
#include "mystring.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main()
{
string s;
string s2="hello";
if(s == s2)
{
cout<<"서로 같다."<<endl;
}
else
{
cout<<"서로 다르다."<<endl;
}
s = s2;
cout<<s<<endl;
if(s == s2)
{
cout<<"서로 같다."<<endl;
}
else
{
cout<<"서로 다르다."<<endl;
}
const char *buf = s.c_str();
cout<<"버퍼:"<<buf<<endl;
cout<<"문자열:";
cin>>s;
cout<<"입력한 내용은 "<<s<<endl;
return 0;
}
실행 결과
서로 다르다.
hello
서로 같다.
버퍼:hello
문자열:yahoo
입력한 내용은 yahoo
본문
[디딤돌 C++] 55. string 클래스 흉내내기1
[디딤돌 C++] 56. string 클래스 흉내내기2
'C++ > 디딤돌 C++' 카테고리의 다른 글
[C++ 소스] 동적 배열(템플릿 클래스) (0) | 2016.12.17 |
---|---|
[C++ 소스] 최대값 위치 찾기(전역 template 함수) (0) | 2016.12.17 |
[C++ 소스] 개체 출력자 (0) | 2016.12.16 |
[C++ 소스] iostream 클래스 내부 (0) | 2016.12.16 |
[C++ 소스] 성적 클래스 (묵시적 형 변환 연산자 중복 정의) (0) | 2016.12.15 |