ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20140827 (메시지 맵, strrev, strupr, toupper, strlwr, tolower, strchr, strstr, strtol, strtoul, strod)
    부산IT학원/스마트컨트롤러 2014. 8. 27. 12:21

    128일차








    ------------------------------

    작성 중인 프로그램 작성 완료

    ------------------------------



    --- 메세지 맵


    메시지 맵 매크로, 메시지 맵 알고르즘이라고 불리는데,

    ms사에 windows의 메시지를 받고 처리하는 방식을

    이 방식으로 하였다.


    간략하게 설명하자면 새로운 함수를 추가할 때마다

    main함수의 소스를 수정해야 하는데,

    메시지 맵. 이 방식을 사용하면 추가 함수와 배열만 건드리면 된다.


    ex)


    #include <stdio.h>

    void Func1();
    void Func2();
    void Func3();
    void Func4();
    void Func5();

    int main()
    {
        int a;

        printf("1 ~ 5 중 입력 : ");
        scanf("%d"&a);

        if(a == 1)
        {
            Func1();
        }
        else if(a == 2)
        {
            Func2();
        }
        else if(a == 3)
        {
            Func3();
        }
        else if(a == 4)
        {
            Func4();
        }
        else if(a == 5)
        {
            Func5();
        }

        return 0;
    }

    void Func1()
    {
        printf("Number 1.\n");
    }

    void Func2()
    {
        printf("Number 2.\n");
    }

    void Func3()
    {
        printf("Number 3.\n");
    }

    void Func4()
    {
        printf("Number 4.\n");
    }

    void Func5()
    {
        printf("Number 5.\n");
    }



    이런 소스가 있는데

    만약 10까지 더 추가하게 되면

    새로운 함수도 추가하고 main도 손봐야 한다.


    메시지 맵 알고리즘을 사용하면


    #include <stdio.h>

    void Func1();
    void Func2();
    void Func3();
    void Func4();
    void Func5();

    typedef struct _MSG_FUNC
    {
        int FuncNum;
        void (*Func)();
    }MSG_FUNC;

    int main()
    {
        int a;
        MSG_FUNC * FuncPoint;
        MSG_FUNC FuncArray[] = {
            {1, Func1},
            {2, Func2},
            {3, Func3},
            {4, Func4},
            {5, Func5},
            {00}
          };

        printf("1 ~ 5 중 입력 : ");
        scanf("%d"&a);

        for(FuncPoint = FuncArray; FuncPoint->FuncNum != 0; ++FuncPoint)
        {
            if(a == FuncPoint->FuncNum)
            {
                (FuncPoint->Func)();
                break;
            }
        }

        return 0;
    }

    void Func1()
    {
        printf("Number 1.\n");
    }

    void Func2()
    {
        printf("Number 2.\n");
    }

    void Func3()
    {
        printf("Number 3.\n");
    }

    void Func4()
    {
        printf("Number 4.\n");
    }

    void Func5()
    {
        printf("Number 5.\n");
    }




    코드량도 줄고

    배열에 멤버만 추가하면 같은 형태의 함수를

    훨씬 쉽게 관리할 수 있다.







    ------- 문자, 문자열 함수


    --- strrev

    문자열 역순으로 변환


    #include <string.h>


    char * strrev(char *str);


    str에 문자열을 역순으로 바꾸고 str에 다시 저장.


    리턴값

    역순으로 바뀐 문자열의 번지를 리턴




    --- strupr

    대문자로 변환


    #include <string.h>


    char * strupr(char * str);

    int toupper(int ch);


    strupr : str에 문자열을 변환하고 str에 다시 저장.


    리턴값

    strupr : 바뀐 문자열 번지 리턴

    toupper : 대문자




    --- strlwr

    소문자로 변환


    #include <string.h>


    char * strlwr(char * str);

    int tolower(int ch);


    strlwr : str에 문자열을 변환하고 str에 다시 저장.


    리턴값

    strlwr : 바뀐 문자열 번지 리턴

    tolower : 소문자





    --- strchr

    문자열에서 임의이 문자 시작하는 위치 찾기


    #include <string.h>


    char * strchr(const char * str, int chr);


    str : 검색 대상 문자열

    chr : 찾는 문자


    리턴값

    성공 : 찾고자 하는 문자가 발견된 위치 포인터를 반환

    실패 : NULL



    --- strstr

    문자열에서 임의의 문자열이 시작하는 위치 찾기


    #include <string.h>


    char * strstr(const char * str1 , const char * str2);


    str1 : 검색 대상 문자열

    str2 : 찾고자 하는 문자열


    리턴값

    성공 : 찾고자 하는 문자열이 발견된 위치 포인터 반환

    실패 : NULL




    --- strtol, strtoul

    문자열을 변환할 진법의 수로 변환


    #include <stdlib.h>


    long int strtol (const char* str, char** endptr, int base);

    unsigned long int strtoul (const char* str, char** endptr, int base);


    str : 변환시킬 문자열 주소

    endptr : 변환된 숫자 다음 위치를 저장할 포인터. 사용하지 않을 시 NULL.

    base : 변환할 진법


    리턴값

    성공 : 변환된 수

    실패 : 0





    --- strtod

    문자열을 double형 수로 변환


    double strtod (const char* str, char** endptr);


    str : 변환시킬 문자열 주소

    endptr : 변환된 숫자 다음 위치를 저장할 포인터. 사용하지 않을 시 NULL.


    리턴값

    성공 : 변환된 수

    실패 : 0.0 반환

Designed by Tistory.