이전 포스팅에서 C언어 / C++에서 정밀한 시간 측정하는 방법인 clock, getTickcount, timeGetTime 함수들에 대해서 알아보았습니다. 코딩을 하다보면 은근히 경과시간을 구해야할 경우가 많습니다. 이 함수들을 활용해서 경과시간을 측정하는 타이머도 만들 수 있습니다. 정밀한 시간 측정 방법이 궁금하시다면 아래 글을 참고해주세요. [C언어/C++] 정밀한 시간 측정 (clock, getTickcount, timeGetTime) 함수의 차이와 사용법 C언어 / C++ 타이머(스톱워치) 만들기 #include #include #include int main() { clock_t start = clock(); for (;;) { clock_t end = clock(); double time ..
C언어나 C++에서 제공하고 있는 시간을 측정하는 함수들이 많이 있습니다. 그중에서는 time함수도 있습니다. 하지만 time함수의 경우 시간을 초(s) 단위 측정까지만 가능하므로 정밀한 시간측정에는 부적합한 함수 입니다. [C언어/C++] 현재 날짜/시간 원하는 형태로 출력하기 (time, localtime) 정밀한 시간 측정하기 어떻게 하면 컴퓨터에서 정밀한 시간을 측정할 수 있을까요? 사실 C언어나 C++같은 프로그래밍 언어에서 시간을 측정할 수 있는 기능을 제공하는 것은 아닙니다. 시간을 측정한다는것 자체가 OS의 힘을 빌려야만 가능합니다. 윈도우에서 여러가지 시간을 측정할 수 있는 함수들을 만들어놓고 그것을 C언어나 C++같은 프로그래밍 언어에서 그대로 가져다 쓰는것 뿐입니다. 그렇다면 OS에서..
double형이나 floot같은 실수형 변수들을 사용하다보면 자릿수가 너무 길어 적절한 시기에 올림이나 반올림, 버림등을 해서 사용하고 싶은 경우가 있습니다. 이런경우 math 헤더안에 있는 cell(올림), round(반올림), floor(버림) 함수를 사용하시면 됩니다. C언어의 경우 반올림을 구하는 round()함수가 따로 없어서 round함수 대신 다른 방법을 사용해야 합니다. 올림(cell), 반올림(round), 내림(floor) 함수 사용법 #include //C언어 #include //C++ //C언어 double ceil(double n); //올림 double floor(double n); //내림 //C++ double ceil(double n); //올림 float ceil(floa..
코딩을 하다보면 가끔 숫자의 절대값이 필요한 경우가 있습니다. 이런 경우 따로 알고리즘 구현없이 abs, labs, fabs라는 절대값 반환 함수를 활용하여 절대값 숫자를 반환받을 수 있습니다. 절대값 반환 함수(abs, labs, fabs) 사용법 //C언어 헤더 #include //abs, labs #include //abs, labs, fabs //C++ 헤더 #include //abs, labs, fabs #include //abs, labs, fabs //사용법 int abs(int n); long labs(long n); double fabs(double n); sqrt절대값 함수를 사용하려면 절대값 함수들이 포함되어 있는 math헤더를 include해야합니다. C++은 cmath을 포함하시면..
C언어나 C++에서 특정 값의 제곱근(루트)을 구하려면 math 헤더에 있는 sqrt함수를 사용하시면 됩니다. 해당함수를 사용하면 따로 알고리즘 구현없이도 함수 호출 한번으로도 원하는 값을 얻어낼 수 있습니다. sqrt 함수 사용법 #include //C언어 #include //C++ //C언어 double sqrt(double n) //C++ double sqrt(double n) float sqrt(float n) long double sqrt(long double n) sqrt함수를 사용하려면 sqrt함수가 포함되어 있는 math헤더를 include해야합니다. C++은 cmath을 포함하시면 됩니다. 제곱을 구할때 사용하는 pow함수와 같이 C언어는 오버로딩이 안되기에 리턴값이 double로 고정되..
C언어나 C++에서 특정 값의 제곱을 구하려면 math 헤더에 있는 pow함수를 사용하시면 됩니다. 해당함수를 사용하면 따로 알고리즘 구현없이도 함수 호출 한번으로 원하는 값을 얻어낼 수 있습니다. pow함수 사용법 #include //C언어 #include //C++ //C언어 double pow(double base, double n) //C++ double pow(double base, double n) float pow(float base, float n) long double pow(long double base, long double n) pow함수를 사용하려면 먼저 pow함수가 포함되어 있는 math헤더를 include해야합니다. C++은 cmath입니다. C언어는 리턴값이 double로 고..
대문자와 소문자의 아스키코드값은 32만큼의 차이가 납니다. 아스키 코드값이 다르기 때문에 컴퓨터에서는 'A'와 'a'를 같은 값으로 인식하지 않습니다. 대문자와 소문자를 같은값으로 인식시켜주기 위해서는 대문자이든 소문자이든 하나로 통일을 시켜주어야 합니다. 이러한 특징을 활용하여 대문자는 32를 더해서 소문자로 치환할 수 있고 반대로 소문자는 32를 빼주어 대문자로 치환할 수 있습니다. #include void main() { char input[1000]; int count = 0; printf("문자열을 입력하세요 \n"); gets_s(input); while (input[count]) { if (input[count] >= 65 && input[count] = 97 && input[count] 대..
모든 문자들은 아스키코드값으로 이루어져 있습니다. 숫자는 48 ~ 57까지 대문자는 65 ~ 90까지 소문자는 97 ~ 122번까지로 구성되어 있죠. 이러한 특성을 활용한다면 문자열을 판별하여 해당 문자가 대문자인지 소문자인지 숫자인지 특수 기호인지를 구분할 수 있는 프로그램을 만들 수 있습니다. #include void main() { char input[1000]; int temp1 = 0, temp2 = 0, temp3 = 0, temp4 = 0; int count = 0; printf("문자열을 입력하세요 \n"); gets_s(input); while (input[count]) { if (input[count] >= 65 && input[count] = 97 && input[count] = 48..
개발을 하다보면 특정 문자열에서 원하는 문자열이 포함되어 있는지 확인해야하는 경우가 있습니다. 이 경우 strstr()함수를 사용하면 간편하게 체크할 수 있습니다. 문자열에서 특정 문자열 검색 strstr 함수 사용법 #include //C언어 #include //C++ char* strstr(char* str1, const char* str2); strstr 함수를 사용하기 위해서는 해당 함수가 포함되어있는 헤더를 포함해야 합니다. C++의 경우 헤더를 포함하시면 됩니다. strstr함수는 찾고자하는 문자열이 있다면 해당 문자열로 시작하는 문자열 포인터를 반환하고 찾고자 하는 문자열이 없다면 NULL값을 반환합니다. 인자값 str1 : search 대상 문자열 str2 : 찾고자 하는 문자열 리턴값 해..
프로그래밍을 하다보면 특정 문자열에서 찾고자 하는 문자가 몇번 포함되어있는지 체크하고 싶을때가 있습니다. 대상 문자를 검색하고 싶다면 문자를 끝까지 반복문을 돌려 문자가 있는지 일일이 비교하여 확인하는 방법도 있겠지만 그 방법보다는 strchr()함수를 사용하면 편리하게 찾을 수 있습니다. 문자열에서 특정 문자 검색 strchr 함수 사용법 #include //C언어 #include //C++ char* strchr(const char*, int character); //C언어 const char* strchr(const char* str, int character); //C++ char* strchr (char* str, int character); //C++ strctr 함수를 사용하기 위해서는 해당..
memmove의 함수는 memory + move의 합성어로 메모리를 이동시키는 목적으로 만들어진 함수입니다. 하지만 실질적인 수행동작은 메모리의 이동이 아닌 메모리의 복사입니다. 실질적인 동작은 앞서 포스팅 했었던 memcpy와 같이 메모리의 값을 복사하는 동작을 똑같이 수행하는데요. 다만 memcpy와는 달리 memmove 함수는 복사할 대상을 버퍼에 복사하고 해당 위치에 가서 버퍼에 복사된 것을 붙여 넣는 식으로 동작이 구현되어있기에 성능은 살짝 떨어지지만 memmove 함수가 더 안정성이 좋습니다. 두 함수의 다른 점은 포스팅의 가장 마지막 부분을 참고해주세요. memmove 함수 사용법 #include //C언어 #include //C++ void* memmove (void* dest, const..
이미 생성한 객체들을 여러개 만들어야 할때 물론 여러번 만들어줄수도 있지만 번거로울 수 있습니다. 이런 경우에는 이미 만들어 놓은 객체들을 복사해서 사용하면 편리한데요. memcpy함수를 사용하여 메모리를 다른곳으로 복사할 수 있습니다. 이번 포스팅에서는 memcpy함수의 사용법에 대해 알아보도록 하겠습니다. memcpy 함수 사용법 #include //C언어 #include //C++ void* memcpy (void* dest, const void* source, size_t num) memcpy함수를 사용하기 위해서는 먼저 memcpy함수가 포함되어 있는 헤더를 포함시켜야 합니다. 헤더는 string.h에도 있고, memory.h에도 memcpy함수가 있습니다. 둘중 아무거나 포함해 주세요. 인자값..
메모리를 할당받은 변수의 공간은 쓰레기 값들이 남아있습니다. 이러한 쓰레기값들을 없애기 위해서 사용할 수 있는 방법중 하나가 memset함수를 사용하는 것입니다. memset 함수를 사용하면 메모리의 내용을 원하는 크기만큼 특정값으로 설정할 수 있습니다. 특히 동적이나 정적으로 생성한 배열을 초기화할 때 자주 사용합니다. memset 함수 사용법 #include //C언어 #include //C++ void* memset(void* ptr, int value, size_t num); memset함수를 사용하기 위해서는 먼저 memset함수가 포함되어 있는 헤더를 포함시켜야 합니다. 헤더는 string.h에도 있고, memory.h에도 memset함수가 있습니다. 둘중 아무거나 포함해 주세요. 인자 값 p..