C언어로 코딩하실 때, 파싱 문제를 만날 때 가장 많이 쓰는 함수는 strtok입니다. 물론, 저는 strchr 조합을 더 많이 쓰긴 합니다만. 익혀두면 편한 쪽은 오늘 소개하는 함수입니다. 함수 원형을 소개하지 않겠습니다. 거의 정석처럼 사용되는 패턴 정도만 소개하도록 하겠습니다. 먼저 '#'을 구분자로 끊어내 봅시다. 보시면 strtok의 1번째 인자에는 parsing을 할, 대상체가 들어가 있습니다. 예를 들자면, "abcd#efg#hijk"와 같은 것들입니다. 그리고, 2번째 인자에는 구분자 집합이 들어가는데요. 여기에서 우리는 '#'을 기준으로 자를 것이므로 '#'만 넣었음을 알 수 있습니다. 12번째 줄이 핵심인데요. strtok는 문자열의 포인터를 리턴해 줍니다. 문자열의 끝에 도달하면, N..
레퍼런스/예제 검색 결과
Java에서 구분자를 기준으로 문자열을 자르는 방법은 몇 가지가 있습니다. 이 중, StringTokenizer를 간단하게 알아보도록 하겠습니다. 그 전에, token이랑, 구분자에 대해서 간단하게 짚고 넘어갑시다. 먼저 "a,ha,d"라는 문자열이 있습니다. 저는 ,를 기준으로 분리를 해 보겠습니다. 이 때, ,를 구분자라고 이야기를 합니다. 문자열을 ,를 기준으로 나눈 셈인데요. 구분자를 보라색으로 표시해 보겠습니다. 그러면 그것에 의해서 "a,ha,d"가 "a", "ha", "d"로 분리가 됩니다. 이러한 것들을 각각 토큰이라고 이야기를 합니다. 만약에 구분자가 ','와 ' '인 경우, 요런 식으로 쪼개질 수 있어요. "a", "a", "d". 아니면 "a"와 "", "a", "d" 순서로 쪼개지거..
오늘은 ctime 함수에 대해서 알아봅시다. 이것은, time_t형을 우리가 알아보기 쉬운 형식인, 예를 들어서 2019-8-25 SUN 11:41:15 형식으로 바꾸는 함수입니다. 물론, 형식을 지정하는 함수도 있습니다만, 이건 다음에 배워보기로 합시다. char *ctime(time_t *tar); 사용 방식은 time_t형 tar의 주솟값을 넘겨줍니다. 그러면, 1970년 1월 1일 0:0:0 UTC+0을 기준으로 tar초만큼 경과가 되었을 건데요. 만약에 로컽 타임을 한국 시간으로 설정했다면, 1970년 1월 1일 9:0:0 UTC+9겠네요. 기준 시간이. 그로부터 경과된 시간만큼 지났을 때, 몇 년도 몇 월 몇 일이고, 몇 시 몇 분 몇 초인가를 문자열 형태로 리턴하는 함수입니다. 대략적으로 c..
memset 함수는 시작 주소값부터 sz 바이트만큼, 바이트 단위로 초기화를 해 주는 함수입니다. 보통 2번째 인자에 넣는 값이 0, -1인 경우가 상당히 많은데요. 0x3f나 0x7f 등도 ps에는 꽤 많이 쓰입니다. 그런데, 바이트 단위로 초기화를 하기 때문에, int형 배열이나 long long형 배열과 같은 경우, 배열에 memset 함수로 0, -1은 넣을 수 있는데, 2, 3과 같은 건 넣을 수 없습니다. 이런 건 조심해야 합니다. 사용 방법은 아래와 같습니다. void *memset(void *tar, int value, size_t sz); 요약하면, tar부터, sz byte만큼 바이트 단위로 value라는 값으로 초기화를 하겠다는 의미입니다. 먼저 예제 프로그램 1을 봅시다. 보시면 1..
STL을 공부하시다 보면, 반복자 무효화라는 용어는 한 번 쯤 들어보셨으리라 생각합니다. 반복자는 순회, 탐색 등을 위해서 쓰는 녀석인데요. 이것이 어떠한 이유로 무효화가 될 수 있습니다. 보통, iterator가 가리키는 것이 삭제 되었을 때 무효화가 되는데요. vector와 같이, 동적 배열을 사용할 때는 그 이외에도 조심해야 할 부분들이 몇 가지 더 있어요. 예제 프로그램 1을 봅시다. 먼저, 이 프로그램을 생각해 봅시다. vector v에 원소를 200개 추가했습니다. 그리고, 이 때, 벡터의 시작 원소를 iter가 가리키게 했습니다. 그리고 난 다음에, v에다가 0부터 1999까지 또 추가를 합니다. 프로그램에는, 벡터에 remove 연산을 가하지 않았습니다. 그런데 결과가 의외입니다. 0 0 ..
최근댓글