글
20140827 (메시지 맵, strrev, strupr, toupper, strlwr, tolower, strchr, strstr, strtol, strtoul, strod)
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},
{0, 0}
};
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 반환
'부산IT학원 > 스마트컨트롤러' 카테고리의 다른 글
20140925 (0) | 2014.09.25 |
---|---|
20140924 (비트맵 파일 구조) (0) | 2014.09.25 |
20140826 (작성 중인 프로그램) (0) | 2014.08.26 |
20140825 (다른 프로그램 실행 분석 프로그램 작성) (0) | 2014.08.25 |
20140822 (다른 프로그램 실행 분석 프로그램 작성) (0) | 2014.08.22 |