로그인

검색

API/MFC
2013.07.28 02:22

CString class

MoA
조회 수 956 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄

CString 객체가 가지는 몇개의 주요 메서드들..

 

GetBuffer(int nMinLength) : CString의 문자열들을 char* 형으로 리턴한다

ReleaseBuffer(int nNewLength = -1) : GetBuffer로 메모리를값을 알아내었을 경우, 그 메모리값을 해제하기 위해 사용

Compare(LPCTSTR lpsz) : 인자로 받은 값과 비교한다

CompareNoCase(LPCTSTR lpsz) :  인자로 받은 값과 비교하는데, 대소문자를 따지지 않음

MakeUpper() / MakeLower() : 문자열들을 대/소문자로 변환

FreeExtra() : CString에서 사용되는 메모리중 불필요한 부분을 삭제함

Format() : 입력받은 인자들의 문자열로 입력. 안에 인자들은 printf 의 것처럼 이용하면 된다.

TrimLeft() / TrimRight() : 왼쪽/오른쪽의 공백을 제거

Left(int nCount) / Right(int nCount) : 왼/오른쪽에서 인자값만큼의 길이를 추출해줌

Mid(int nFirst , int ) : 첫 인자를 인덱스로 두번제 인자값만큼의 길이를 추출해줌

Find(LPCTSTR lpszSub, int nStart) : 문자열 데이터에서 인자로 주어진 문자나 문자열의 인덱스를 검사

FindOneOf(LPCTSTR lpszCharSet) : 문자열 데이터에서 인자로 주어진 문자나 문자열이 있는지 검사하여 인덱스 리턴


                 ** CString 클래스는 +, += 같은 연산자는 정의되어 있음.


http://reimemuber.tistory.com/9



CString::GetLength

이 메소드는 CString 객체 안에 있는 캐릭터의 count를 반환한다.

이 count는 종료null문자를 포함하지 않는다.

// example for CString::GetLength
CString s( "abcdef" );
ASSERT( s.GetLength() == 6 );

 

CString::IsEmpty

이 메소드는 CString 객체가 비어있는지를 결정한다.

// example for CString::IsEmpty
CString s;
ASSERT( s.IsEmpty() );

 

CString::Empty

이 메소드는 CString객체를 비어있고 free memory로 만든다.

// example for CString::Empty
CString s( "abc" );
s.Empty();
ASSERT( s.GetLength( ) == 0 );

 

CString::GetAt

이 메소드는 인덱스넘버에의해 하나의문자를 반환한다.

// example for CString::GetAt
CString s( "abcdef" );
ASSERT( s.GetAt(2) == 'c' );

 

 

CString::SetAt

이 메소드는 인덱스넘버에 의해 지정받는 한문자를 덮어쓴다.

 

CString::Compare

이 메소드는 CString 객체와 다른 문자열을 Windows CE lstrcmp함수를 사용해서 비교한다.

// example for CString::Compare
CString s1( "abc" );
CString s2( "abd" );
ASSERT( s1.Compare( s2 ) == -1 ); // Compare with another CString.
ASSERT( s1.Compare( _T("abe" ) ) == -1 ); // Compare with LPTSTR string.

 

 

CString::CompareNoCase

이 메소드는 CStiring객체와 다른 문자열을 lstrcmpi 함수를 사용해서 비교한다.

(대문자가 상관없이 비교하는듯?...)

// example for CString::CompareNoCase
CString s1( "abc" );
CString s2( "ABD" );
ASSERT( s1.CompareNoCase( s2 ) == -1 ); // Compare with a CString.
ASSERT( s1.Compare( _T("ABE" ) ) == -1 ); // Compare with LPTSTR string.

 

 

CString::Mid

이 메소드는 CString 객체의 0위치부터 nCount의 부분문자열을 추출한다.

추출된 부분문자열을 복사해서 리턴한다.

인덱스가 zero base인것을 제외하고는 Basic MID함수와 비슷하다.

// example for CString::Mid
CString s( _T("abcdef") );
ASSERT( s.Mid( 2, 3 ) == _T("cde") );

 

CString::Left

왼쪽부터 nCount의 문자열을 추출~

// example for CString::Left
CString s( _T("abcdef") );
ASSERT( s.Left(2) == _T("ab") );

 

CString::Right

오른쪽부터 nCount의 문자열을 추출~

// example for CString::Right
CString s( _T("abcdef") );
ASSERT( s.Right(2) == _T("ef") );

 

CString::SpanIncluding

이 메소드는 문자열로부터 문자를 추출하고, lpszCharSet에의해 확인된 문자열의

첫번째 문자부터 시작한다.

만약 string의 첫번째 문자가 문자셋에 없으면 SpanIncluding은 empty string을 리턴한다.

그렇지 않다면 set안에 있는 연속적인 문자열을 연속으로 리턴한다.

// example for CString::SpanIncluding
CString str( "cabbage" );
CString res = str.SpanIncluding( _T("abc") );
ASSERT( res == "cabba" );
res = str.SpanIncluding( _T("xyz") );
ASSERT( res.IsEmpty( ) );

 

CString::SpanExcluding

This method searches the string for the first occurrence of any character in the specified set lpszCharSetSpanExcluding extracts and returns all characters preceding the specified character set. In other words, the specified character set, and all characters following it in the string, are not returned. If the specified character set is not found in the string, then SpanExcluding returns an empty string.(이해못함)

// Portions are delimited by a semicolon( ; ),
//  a comma( , ), a period( . ), a dash( - ),
// or a colon( : ).

CString GetFirstPart( CString src)
{
    return src.SpanExcluding( _T(";,.- :"));
}

 

CString::MakeUpper

이 메소드는 CString 객체를 대문자로 바꾼다.

// example for CString::MakeUpper
CString s( "abc" );
s.MakeUpper();
ASSERT( s == "ABC" );

 

CString::MakeLower

소문자를 대문자로~

// example for CString::MakeLower
CString s( "ABC" );
s.MakeLower();
ASSERT( s == "abc" );

 

CString::MakeReverse

앞뒤를 바꺼바꺼~

// example for CString::MakeReverse
CString s( "abc" );
s.MakeReverse();
ASSERT( s == "cba" );

 

CString::Format

이 메소드는 sprintf 포맷이 데이타를 C-style 캐릭터배열로 포맷하는것과 같은 방법으로

데이타를 쓴다.

일련의 문자열과 CString안의 값을 포맷하고 저장한다?...

잘모르겠음~

CString str;

str.Format(_T("Floating point: %.2fn"), 12345.12345);
_tprintf(_T("%s"), (LPCTSTR) str);

str.Format(_T("Left-justified integer: %.6dn"), 35);
_tprintf(_T("%s"), (LPCTSTR) str);

str.Format(IDS_SCORE, 5, 3);
_tprintf(_T("%s"), (LPCTSTR) str);

 

CString::TrimLeft

이 메소드는 줄이나,빈칸,탭을 삭제한다.

 

CString strBefore;
CString strAfter;

strBefore = _T("tt   ****Hockey is best!");
strAfter = strBefore;
strAfter.TrimLeft(T_("t *"));//t와 *를 삭제하는듯.

_tprintf(_T("Before: "%s"n"), (LPCTSTR) strBefore); //"tt ****Hockey is best!"

_tprintf(_T("After : "%s"n"), (LPCTSTR) strAfter);     //"Hockey is best!"

 

 

CString::TrimRight

역시 오른쪽의 선언한것들을 삭제하는듯

CString strBefore;
CString strAfter;

  strBefore = "Hockey is Best!!!!";
  strAfter = strBefore;
  str.TrimRight('!');
  _tprintf("Before: "%s"n", (LPCTSTR) strBefore);
  _tprintf("After : "%s"nn", (LPCTSTR) strAfter);

  strBefore = "Hockey is Best?!?!?!?!";
  strAfter = strBefore;
  str.TrimRight("?!");
  _tprintf("Before: "%s"n", (LPCTSTR) strBefore);
  _tprintf("After : "%s"nn", (LPCTSTR) strAfter);

CString::Find

이 메소드는 부분문자열의 첫번째 매치되는 문자를 조사한다.

// First example demonstrating
// CString::Find ( TCHAR ch )
CString s( "abcdef" );
ASSERT( s.Find( 'c' ) == 2 );
ASSERT( s.Find( _T("de" ) ) == 3 );

// Second example demonstrating
// CString::Find( TCHAR ch, int nStart )
CString str("The stars are aligned");
int n = str.Find('e', 5);
ASSERT(n == 12);

 

CString::ReverseFind

뒤에서 부터 찾는듯~

// Example for CString::ReverseFind
CString s( "abcabc" );
ASSERT( s.ReverseFind( 'b' ) == 4 );

 

CString::FindOneOf

이 메소드는 lpszCharSet안에 포함된 어떤문자라도 매치되는 첫번째 문자를 찾기위해 조사한다.

// example for CString::FindOneOf
CString s( "abcdef" );
ASSERT( s.FindOneOf( _T( "xd" ) ) == 3 ); // 'd' is first match x는없고d는 있으니 d를 찾은듯.

 

 

CString::GetBuffer

이 메소드는 CStirng 객에의 내부의 캐릭터버퍼의 포인터를 되찾는다.

LPTSTR은 const로 리턴되지않고 CStirng 목차안의 직접수정을 허락한다.

만약 nMinBufLength가 현재 버터의 길이보다 크면 GetBuffer가콜되어 현재의 버퍼를파괴할것이다

그것을 요청된 사이즈의 버퍼로 바꾸고, 카운트를 zero로 고쳐라?..

만약 당신이 이버퍼위에 LockBuffer를 콜했다면 당신은 버퍼의 lock을 잃어버릴것이다.

// example for CString::GetBuffer
CString s( "abcd" );
#ifdef _DEBUG
afxDump << "CString s " << s << "n";
#endif
LPTSTR p = s.GetBuffer( 10 );
lstrcpy( p, _T("Hello") );  // directly access CString buffer
s.ReleaseBuffer( );
#ifdef _DEBUG
afxDump << "CString s " << s << "n";
#endif

CString::GetBufferSetLength

이 방법은 CStirng 객체의 내부의 캐릭터 버터의 포인터를 반환하고

필요하다면 nNewLength에서 지정받는 길이와 정확히 맞추기위해 , 그것의 길이를 끊거나

증가한다.

CString str;
LPTSTR pstr = str.GetBufferSetLength(3);
pstr[0] = 'I';
pstr[1] = 'c';
pstr[2] = 'e';

// No need for trailing zero or call to ReleaseBuffer()
// because GetBufferSetLength() set it for us!

str += _T(" hockey is best!");

 

CString::ReleaseBuffer

이 메소드는 GetBuffer에 의해 할당된 버퍼를 해체한다.

만약 당신이 버퍼스트링이 널로 끝난다는 것을 알면 당신은 nNewLength 파라미터를 생략할수있다

만일 당신의 스트링이 널로 안끝나면 그 길이를 지정하기위해 nNewLength를 사용해라.

GetBuffer에 의해 리턴된 주소는 ReleaseBuffer나 다른 어떤 CString operation이 콜되도 무효하다

// example for CString::ReleaseBuffer
CString s;
s = "abc";
LPTSTR p = s.GetBuffer( 1024 );
strcpy(p, "abc");  // use the buffer directly
ASSERT( s.GetLength() == 3 ); // String length = 3
s.ReleaseBuffer();  // Surplus memory released, p is now invalid.
ASSERT( s.GetLength() == 3 ); // Length still 3

 

 

CString::FreeExtra

This method frees any extra memory previously allocated by the string but no longer needed. This should reduce the memory overhead consumed by the string object. The method reallocates the buffer to the exact length returned by GetLength.

#include <afx.h>

void PrintLengths(CString& str)
{
   _tprintf("Alloc length is %d, String length is %dn",
      str.GetAllocLength(), str.GetLength());
}

void main()
{
   // Create a CString with 1024 characters
   CString str('x', 1024);
   PrintLengths(str);

   // Assigning a smaller string won't cause CString to free its
   // memory, as it assumes the string will grow again anyway.
   str = _T("Hockey is Best!");
   PrintLengths(str);

   // This call forces CString to release the extra
   // memory it doesn't need.
   str.FreeExtra();
   PrintLengths(str);
}

 

output
Alloc length is 1024, String length is 1024
Alloc length is 1024, String length is 15
Alloc length is 64, String length is  15

 

CString::LockBuffer

버터의 string을 락시킴;

 

 

CString::UnlockBuffer

락된 버터를 언락시킴- _-;

 

 

CString::AllocSysString

이 방법은 새로운 BSTR 타입의 새로운 Automation 을 할당하고 CString 객체의 목차를 복사하고

종료의 널문자를 포함한다.

CMemoryException는 만약 불충분한 메모리가 존재하면 던져진다?;;

이 메소드는 Automation한 스트링을 반환하기 위해 일반적으로 사용된다.

CString::AllocSysString

CString str("Hockey is Best!");
BSTR bstr = str.AllocSysString();

// bstr now contains "Hockey is best", and can be
// passed to any OLE function requiring a BSTR.
// Normally, the function receiving the BSTR will
// free the string when it is done using it.

 

CString::SetSysString

이 메소드는 pbstr에의해 참조되는 BSTR을 재할당하고 널 문자를 포함하는 CString 객체의 목차를 카피한다. pbstr에 의해 참조되는 BSTR의 값은 바뀔수도 있다.이 메소드는 만약 불충분한 메모리가 존재하면 CMemoryException을 던진다?;

이 메소드는 통상 OLE Automation의 참조에 의해 통과되는 문자열의 값을 바꾸기위해 사용된다.

// create an OLE string
BSTR bstr = ::SysAllocString(L"Golf is fun!");

// create a CString and change the OLE
// string to the contents of the BSTR
CString str("Hockey is best!");
BSTR bstr2 = str.SetSysString(&bstr);

// Now, both bstr and bstr2 reference a single instance of
// the "Hockey" string. The "Golf" string has been freed.
ASSERT(bstr2 == bstr);

 

CString::LoadString

이 메소드는 Windows CE 스트링 리소스를 읽고 기존의 CString 객체에 nID로 확인된다.

// example for CString::LoadString
#define IDS_FILENOTFOUND 1
CString s;
if (! s.LoadString( IDS_FILENOTFOUND ))
{
    AfxMessageBox("Error Loading String: IDS_FILENOTFOUND");
    ...
}


http://blog.naver.com/happypcb/90003468368

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Tool/etc Programming 게시판 관련 2 MoA 2014.11.01 5345
88 API/MFC #pragma MoA 2013.07.28 839
87 Graphic DirectX 9.0c SDK을 Visual Studio2008에 적용방법 MoA 2013.07.28 710
86 Graphic Video Preview and Frames Capture MoA 2013.07.28 1708
85 API/MFC MFC TIP MoA 2013.07.28 992
84 Site 이미지공학(IE) 연구실 MoA 2013.07.28 652
» API/MFC CString class MoA 2013.07.28 956
82 API/MFC Visual C++ 시리얼 통신(RS-232) 강좌 (2) 1 MoA 2013.07.28 5374
81 API/MFC Visual C++ 시리얼 통신(RS-232) 강좌 (1) MoA 2013.07.28 7140
80 Library High-speed Charting Control MoA 2013.07.28 1002
79 API/MFC DLL 이란 MoA 2013.07.28 1422
78 C/C++ extern "C" 에 관하여 MoA 2013.07.28 1188
77 API/MFC UpdateData(TRUE) or UpdateData(FALSE) 구분 MoA 2013.07.28 1037
76 API/MFC InvalidateRect 함수, flag성 메세지 MoA 2013.07.25 959
75 API/MFC UpdateWindow 함수에 대하여.. MoA 2013.07.25 1041
74 API/MFC 다이얼로그 resize 시 child control의 그래픽 깨짐 해결 2 MoA 2013.07.25 1913
73 API/MFC Property Sheet의 버튼 속성 변경하기 MoA 2013.07.25 1131
72 API/MFC CPaneDialog 초기화 (OnInitDialog) MoA 2013.07.18 1550
71 API/MFC CDockablePane 버튼 비활성화 문제 MoA 2013.07.17 2056
70 API/MFC CDockablePane 배경화면 회색으로 변경 MoA 2013.07.11 1467
69 JAVA/Android What to use instead of “addPreferencesFromResource” in a PreferenceActivity? MoA 2013.06.13 1152
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 Next
/ 15