데이터 구조 교수님께서 2번째로 내주신 과제,
날짜 변환 해주는 문제 입니다.
입력값
2009 5 3
출력값
03-May-2009
#include#include //atoi 함수 void date_string(char *dateStr, struct date day); struct date { int yy; //년 int mm; //월 int dd; //일 } day; char *arr[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; /* arr[0] = "Jan" arr[1] = "Feb" arr[2] = "Mar" ... 이러한 형식으로 포인터 배열 생성 */ int main(int argc, char **argv) { char Str[20]; if (argc != 4) // 4개의 인자값이 아닌경우 종료 (경로 년 월 일) { printf("잘못된 인수값 입니다\n"); return 0; } day.yy = atoi(argv[1]); //년 day.mm = atoi(argv[2]); //월 day.dd = atoi(argv[3]); //일 /* 전에 과제에서 적었던것 처럼 문자열로 받기 때문에 숫자열로 변환하고, 입력 받은 인자값을 구조체 변수에 넣는다. */ date_string(Str, day); //date_string 함수 호출 printf("%s", Str); return 0; } void date_string(char *dateStr, struct date day) //dateStr 포인터에는 Str의 주소가 대입되어 있음 { int i; if (day.yy > 1999) // 년이 2000년 이후 일경우 4자리 그대로 출력 { sprintf(dateStr, "%02d-%s-%d", day.dd, arr[day.mm-1], day.yy); //일,월,년 /* 먼저 일 2자리 표시는 예를들어 1 이란 숫자를 %02d 로 표현하면 01 로 나오고, %03d 로 표현하면 001이 나온다. 일 은 2자리로 표현해야 하므로 %02d 를 사용하였다. 구조체에 저장된 mm변수값 을 arr[day.mm-1] 이렇게 해주면 만약 인자로 넘겨받은 월이 5 일경우 arr[5-1] 즉 arr[4] = "May"(5월) 이렇게 됩니다. 2000년 이후는 4자리 그대로 출력해야하니 그대로 구조체에 저장된 값으로 출력해준다. */ } else // 2000년 미만 일경우 { for(i=1900;i!=0;i-=100) // 아래 년 뺄셈할 값을 -100 씩 빼준다. { if (day.yy >= i) // 구조체에 저장된 년이 i값 보다 큰경우에만 발동 여기서 i값은 100씩 감소된다. (ex. 1940 >= 1900) { sprintf(dateStr, "%02d-%s-%d", day.dd, arr[day.mm-1], day.yy-i); //일,월,년 break; /* 만약 day.yy 구조체에 저장된 년이 1935년 일경우 1935 - 1900 이 되어 뒤에 두자리 즉 35만 남게되어 출력하는 방식 dateStr 에 리턴시키고 break 를 통해 for문 종료 */ } } } }
'프로그래밍 > 자료구조/알고리즘' 카테고리의 다른 글
자바로 구현하는 버블소트 (Bubble sort) 알고리즘 (1) | 2014.08.18 |
---|---|
자바로 구현하는 링크드 리스트 (Singley LinkedList) (0) | 2014.07.22 |
문자열 뒤집기 (0) | 2011.10.15 |
커맨드라인 을 통한 시간 초 변환 예제 (0) | 2011.10.15 |
변수값 입력받아 수행시간 측정하는 코드 (0) | 2011.10.15 |