kyuseo의 게임 프로그래밍

MakeLower, MakeUpper, FindNoCase :: 대문자 소문자 관련 문자열 함수 본문

C++ 개발

MakeLower, MakeUpper, FindNoCase :: 대문자 소문자 관련 문자열 함수

kyuseo 2007. 11. 18. 13:16

개요..

 

CString 또는 API 함수중에서 대소문자를 구분하지 않고 문자열을 찾는 함수가 없어서 만들었습니다. 효율성보다는 편리성을 우선으로 만든 함수입니다.

 

보너스로 한글이 포함된 문자열을 일본 윈도우에서 CString 함수인 MakeLower, MakeUpper 함수를 사용할 경우 프로그램이 다운되는 현상을 막기 위하여 새로 제작한 MakeLower, MakeUpper 함수도 포함되어 있습니다.

 

 

코드

 

함수:

/// 문자열을소문자로변경한다. (다국어입력시일본윈도우등에서오작동되는경우를보완하기위하여만듦)

inline void MakeLower( CString& str )

{

    for( int i = 0; i < str.GetLength(); i++ )

    {

        char c = str[i];

        if( c >= 'A' && c <= 'Z' )

        {

            str.SetAt( i, c + 'a' - 'A' );

        }

    }

}

 

/// 문자열을대문자로변경한다. (다국어입력시일본윈도우등에서오작동되는경우를보완하기위하여만듦)

inline void MakeUpper( CString& str )

{

    for( int i = 0; i < str.GetLength(); i++ )

    {

        char c = str[i];

        if( c >= 'a' && c <= 'z' )

        {

            str.SetAt( i, c + 'A' - 'a' );

        }

    }

}

 

/// 대소문자를구분하지않고문자열을찾는다.

inline int FindNoCase( LPCSTR szSrc, LPCSTR szFind )

{

    CString strSrc = szSrc;

    CString strFind = szFind;

 

    if( strSrc.IsEmpty() == TRUE || strFind.IsEmpty() == TRUE ) return -1;

 

    MakeLower( strSrc );

    MakeLower( strFind );

 

    return strSrc.Find( strFind );

}

 

 

사용예:

    CString strContext = "안녕하세요 문자열을 찾아봅시다";

 

    int nIndex = FindNoCase( strContext, "문자열" );

 

    // 못찾음

    if( nIndex == -1 )

    {

        TRACE( "%s(%d) : 못찾음\n" , __FILE__, __LINE__ );

    }

    // 찾음

    else

    {

        TRACE( "%s(%d) : 찾은위치= %d \n" , __FILE__, __LINE__, nIndex );

    }

 

출력 :

d:\fungrepproject\funmatgo\commonfunmatgo\commonfunmatgo.cpp(24) : 찾은 위치 = 11