c언어에서 time(NULL) 함수로, 1970년 1월 1일부터 현재까지 경과된 초를 리턴한다고 했었습니다. 이 값만 끌어와서 뭔가 의미있는 데이터로 가공하고 싶은데, 어떻게 하면 좋을까요? 현재까지 경과된 초를 넘겨주면, 데이터를 잘 가공해서, struct tm *형을 리턴해 주는 함수가 있는데요. 이것이 localtime 함수입니다. struct tm *localtime(time *cur_t); 그러면, struct tm형은 어떠한 필드들로 이루어져 있을까요? 예제에서 다루는 중요한 필드만 몇 개 봅시다. tm_sec, tm_min, tm_hour는 각각 시, 분, 초를 의미합니다. 그리고, tm_mday, tm_mon, tm_year가 있는데요. 이것은, 각각 몇 일, 몇 월, 몇 년임을 의미합니다..
레퍼런스/예제 검색 결과
c++이나 java에는 부분 문자열을 가지고 오는 함수가 있습니다. 각각 substr과, substring이에요. 예를 들어, 어떠한 문자열 str = "chogahui"가 있고, 1번째부터 3번째까지 가지고 온 부분 문자열 sub = "hog"일 거에요. 이걸 가지고 오는 함수를 string.h에서는 찾기가 힘듭니다. 그러면 이것을 어떻게 구현해야 할지, 생각해 봅시다. 사실 핵심적인 것은 간단합니다. 어떠한 시작 위치에서부터 t개 만큼을 어딘가로 복사한다. 만약에 문자열 str에서 [s,e)까지의 부분 문자열을 복사한다면 e-s개를 어딘가로 복사를 하는 것입니다. 그러면, 문자열을 복사를 하는데, 시작 위치로부터 t개만큼 copy 하는 함수를 찾으면 되는데요. 그것이 strncpy 함수입니다. cha..
문자열 안에서 pat 이라는 문자열이 있는지 찾는 함수는 strstr이였습니다. wandbox에서는 생각보다 빠르게 그 함수가 동작하는데, 그 이유는 언젠가 한 번 문자열 알고리즘을 하면서 뜯어 본다고 했었어요. 사실 벌써부터 쉽지 않을 거 같은 예감이 드네요. 오늘은 문자열 안에 어떠한 문자가 있는지를 판단하는 함수를 배워볼 건데요. 그 함수는 strchr입니다. 원형을 봅시다. char *strchr(const char *str,int ch); char형 포인터를 리턴합니다. str이라는 문자 열에서, ch가 나타나는 최초의 위치를 리턴합니다. 만약에 나타나지 않는다면 NULL 값을 리턴해요. 어렵지 않아요. 예를 들어 문자열 str이 "chogahui05"가 있었다고 해 봅시다. 그러면 여기서, '..
strstr의 세부 구현은, 문자열 알고리즘을 하면서 차차 알아가도록 합시다. C언어에서, 어떤 문자열에서 특정한 문자열이 있는지 (패턴), 간단하게 찾기 위해서 strstr를 이용하면 좋습니다. 이 친구는 다음과 같이 씁니다. char *strstr(const char *str,const char *pat); str 안에 pat이 있는지 찾습니다. 만약에 있다면, 찾은 최초의 위치를 리턴합니다. 그렇지 않다면 NULL을 리턴합니다. 예를 들어서 설명해 보겠습니다. 저는 "chogahuigatrainlike"에서 "ga"를 찾으려고 합니다. 그러면 strstr은 어떤 것을 리턴할까요? char형 포인터를 리턴하니까, char형이 저장되어 있는 공간을 가리키는, 주솟값을 리턴할 건데요. str이 이런 식으..
메모리를 바이트 단위로 복사할 때, c나 c++ 에서는 memcpy와 memmove를 많이 사용합니다. 물론, pod 타입이여야 한다는 전제가 깔리긴 하지만요. 이 둘은 어떻게 쓸까요? c언어 memcpy나, memmove는 1번째 인자가 dest 포인터, 2번째 인자는 orignal 포인터, 3번째 인자를 몇 바이트만큼을 복사할 것인지를 넘겨줍니다. 메모리에 있는 내용을 바이트 단위로 복사하는 것은 두 함수의 공통점입니다. 삽입 정렬을 구현할 때, 이 두 함수를 잘 이용하면 좋겠지요. 첫 번째 예제 프로그램을 봅시다. int형 20개를 저장할 수 있는 ori 배열과 des 배열을 선언했습니다. 저는 ori 배열에 0, 1, ... , 19를 넣었습니다. 원소 갯수는 20개입니다. 그리고, 저는 des가..
최근댓글