-
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},
{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