ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • string 클래스
    카테고리 없음 2013. 3. 2. 14:08
    반응형


    stdfx.h 헤더

    #pragma once


    #include "targetver.h"


    #include <stdio.h>

    #include <tchar.h>

    #include <iostream >


    using namespace std;

    ======================================================

    #pragma once


    class cMyString

    {

    private:

    //< NULL을 제외한 문자열의 길이

    int m_nLength;

    //< 문자열

    char* m_pStr;


    public:

    //< 생성자

    cMyString(void);

    //< 인자가 있는 생성자

    cMyString( const char* pStr );

    //< 복사생성자

    cMyString( const cMyString& rhs );

    //< 소멸자

    ~cMyString(void);


    //< 길이를 반환 

    inline unsigned int size( void ) const { return m_nLength; }

    inline unsigned int length( void ) const { return m_nLength; }


    //< char*를 반환하는 함수

    const char* c_str( void ) const { return m_pStr; }


    //< 연산자 오버로딩 

    cMyString& operator=( const char* pStr );

    cMyString& operator=( const cMyString& rhs );


    cMyString& operator+=( const char* pStr );

    cMyString& operator+=( const cMyString& rhs );


    cMyString operator+( const char* pStr );

    cMyString operator+( const cMyString& rhs );


    bool operator==( const char* pStr );

    bool operator==( const cMyString& rhs );

    char& operator[]( const int nIndex );

    const char& operator[]( const int nIndex ) const;


    //< 출력또는 입력

    friend ostream& operator<<( ostream& os, const cMyString& s )

    {

    os << s.m_pStr;

    return os;

    }


    friend istream& operator>>( istream& is, cMyString& s )

    {

    char str[_MAX_FNAME];

    is >> str;

    s = cMyString(str);


    return is;

    }

    };


    ======================================
    #include "StdAfx.h"
    #include "cMyString.h"

    //< 디폴트 생성자
    cMyString::cMyString(void)
    :m_nLength(0),m_pStr(NULL)
    {
    m_pStr = new char[ 1 ];
    m_pStr[0] = NULL;
    }

    //< 인자가 있는 생성자
    cMyString::c
     MyString( const char* pStr )
    {
    m_nLength = strlen( pStr );
    if( m_nLength != 0 )
    {
    m_pStr = new char[ m_nLength + 1 ];
    strcpy_s( m_pStr , m_nLength + 1, pStr );
    }
    else
    {
    m_pStr = new char[ 1 ];
    m_pStr[0] = NULL;
    }
    }
    //< 복사생성자
    cMyString::cMyString( const cMyString& rhs )
    :m_nLength( rhs.m_nLength )
    {
    if( m_nLength != 0 )
    {
    m_pStr = new char[ m_nLength + 1 ];
    strcpy_s( m_pStr , m_nLength + 1, rhs.m_pStr );
    }
    else
    {
    m_pStr = new char[ 1 ];
    m_pStr[0] = NULL;
    }
    }

    //< 소멸자
    cMyString::~cMyString(void)
    {
    SAFE_DELETE_ARRAY(m_pStr);
    }

    //< 연산자 오버로딩 
    cMyString& cMyString::operator=( const char* pStr )
    {
    if( pStr != NULL )
    {
    //< 기존 버퍼 삭제
    SAFE_DELETE(m_pStr);

    m_nLength = strlen( pStr );
    m_pStr = new char[ m_nLength + 1 ];
    strcpy_s( m_pStr , m_nLength + 1, pStr );
    }
    return *this;
    }
    cMyString& cMyString::operator=( const cMyString& rhs )
    {
    //< 자신확인
    if( this == &rhs )
    {
    return *this;
    }

    //< 기존 버퍼 삭제
    SAFE_DELETE(m_pStr);

    m_nLength = rhs.m_nLength;
    m_pStr = new char[ m_nLength + 1 ];
    strcpy_s( m_pStr , m_nLength + 1, rhs.m_pStr );

    return *this;
    }

    cMyString& cMyString::operator+=( const char* pStr )
    {
    return *this += cMyString(pStr);
    }
    cMyString& cMyString::operator+=( const cMyString& rhs )
    {
    //< 기존 뒤에 붙이는것 ( 기존 버퍼를 위해 보관 )
    char* old;
    old = m_pStr;

    //< 갯수 증가
    m_nLength += rhs.m_nLength;

    m_pStr = new char[ m_nLength + 1 ];

    //<임시로 저장되었던 문자열 복사
    strcpy_s( m_pStr ,m_nLength + 1, old);

    //<새롭게 추가되는 문자열 복사
    strcat_s( m_pStr ,m_nLength + 1, rhs.m_pStr);
    //< 기존 버퍼 삭제
    delete[] old;

    return *this;
    }

    cMyString cMyString::operator+( const char* pStr )
    {
    return cMyString();
    }
    cMyString cMyString::operator+( const cMyString& rhs )
    {
    return cMyString();
    }

    bool cMyString::operator==( const char* pStr )
    {
    return false;
    }
    bool cMyString::operator==( const cMyString& rhs )
    {
    return false;
    }

    char& cMyString::operator[]( const int nIndex )
    {
    return m_pStr[0];
    }
    const char& cMyString::operator[]( const int nIndex ) const
    {
    return m_pStr[0];
    }
    ===========================================
    // 00_MyString.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
    //

    #include "stdafx.h"
    #include "cMyString.h"


    int _tmain(int argc, _TCHAR* argv[])
    {
    cMyString s("테스트");
    cMyString t("....");
    cout << s << endl;
    cout << s.c_str() << endl;
    cout << s.length() << endl;
    cout << s.size() << endl;
    s += "이런";

    cout << s << endl;
    s += t;
    cout << s << endl;
    return 0;
    }

    반응형
Designed by Tistory.