프로그래밍 언어/C++

    [C++] min max 함수 (algorithm 라이브러리)

    0. std::min & std::max 1. ①비교할 값들이 많거나, ②ArrayㆍVector와 같은 일련의 컨테이너에 저장되어 있다면, 최소값ㆍ최대값을 구하기 위해 min_element 또는 max_element 함수를 사용할 수 있다. (해당 함수에 대해서는 나중에 포스팅 하겠다.) 2. std::min와 std::max는 algorithm 라이브러리에 3가지 형태로 존재한다. 『① Default Constructor 』 『② Custom Constructor 』 『③ Initializer List Constructor 』 가 이에 해당한다. 1. std::min & std::max 『① Default Constructor 』 함수 원형 /* -- Default Constructor -- */ #i..

    [C] min max 매크로함수

    1. The old C macro way 매크로 원형 /* min */ #define min(a, b) (((a) (b)) ? (a) : (b)) 단점 : double-evaluation side effect 발생 /* Input */ #include #define min(a, b) (((a) (b)) ? (a) : (b)) int main(int argc, char * argv[]) { int a = 2, b = 3; printf("%d\n", min(a, b)); printf("a : %d b : %d\n\n", a, b..

    [C] 문자열에서 공백을 제거하는 함수

    문자열 중앙에 있는 공백도 제거하는 함수가 필요해서 만들었다. 아래의 DeleteSpace함수는 인수로 받는 문자열에서 문자열에서 앞, 뒤, 가운데에 있는 모든 공백을 제거해서 제거된 문자열을 반환하는 함수다. 사용법: char *str = DeleteSpace("공백이 있는 문자열"); char str[] = DeleteSpace("공백이 있는 문자열"); #include #include char* DeleteSpace(char s[]) { char* str = (char*)malloc(sizeof(s)); int i, k = 0; for (i = 0; i < strlen(s); i++) if (s[i] != ' ') str[k++] = s[i]; str[k] = '\0'; return str; } i..

    [C] 재귀함수(Recursive/리쿼시브)의 개념과 공부하는 이유

    재귀란 무엇인가? 컴퓨터 과학에 있어서 재귀(再歸, Recursion)는 자신을 정의할 때 자기 자신을 재참조하는 방법을 뜻하며, 이를 프로그래밍에 적용한 재귀 호출(Recursive call)의 형태로 많이 사용된다. 또 사진이나 그림 등에서 재귀의 형태를 사용하는 경우도 있다. (위키백과) 위키백과에서 가져온 재귀의 컴퓨터 과학 측면에서의 정의이다. 쉽게 말해서, "재귀적으로 정의했다" 라는 말은 자기 자신을 정의할 때 자기 자신을 이용했다는 것이다. 가령 5! (5 팩토리얼)을 정의할 때도, 5! = 5 * 4! 라고 나타낼 수 있으므로 이를 일반화하면 n! = n * (n - 1)! 라고 나타낼 수 있게 된다. 이 등식에서 팩토리얼을 정의하는데 있어서 팩토리얼을 사용했다는 것은, 재귀적 정의를 활..

    [C++] 공백 포함 문자열 입력받기

    1. getline 이용 getline을 쓰면 알아서 공백 포함하여 문자열을 입력받는다. int main() { string s; getline(cin, s); cout

    [C] 공백 포함 문자열 입력 받기 (scanf, gets, fgets)

    #include #define LEN 1000000 int main(){ char str[LEN]; scanf("%s",str); printf("%s",str); } 1. scanf[] scanset character scanset character [] 를 scanf 함수에 추가해 주는 방법이다. [^"문자"]의 의미는 해당 문자가 나오기 전 까지 모든 문자열을 받겠다는 뜻이다. 개행(엔터)를 의미하는 문자인 "\n" 를 ^뒤에 넣어주면, 개행(엔터)가 나오기 전 까지 모든 문자열을 받겠다는 뜻이 된다. 따라서, 공백도 포함해서 입력을 받을 수 있게 되는 것이다. /* scanset character 예시 */ #include #define LEN 1000000 int main(void){ char s..

    [C] 지역 변수 2차원 배열 동적 할당 및 해제 코드

    #define _CRT_SECURE_NO_WARNINGS #include #include #include void main() { int n; scanf("%d", &n); // 동적할당 int** arr = (int**)malloc(sizeof(int*) * n); memset(arr, 0, sizeof(int*) * n); if (arr == NULL) return; for (int y = 0; y < n; y++) { arr[y] = (int*)malloc(sizeof(int) * n); memset(arr[y], 0, sizeof(int) * n); } for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) arr[y][x] += 1 + y + x;..

    [C] main 함수에게 return 이란?

    return 은 c언어의 예약어이다. 리턴값은 없거나 있다면 정수형이어야 한다. C++ 표준 문서(43p)에는 정확하게 It shall have a return type of type int, but otherwise its type is implementation defined 이렇게 되어 있다. main 함수의 리턴값은 int형의 타입을 가지는 것이 좋지만 구현 방식에 따라 다른 타입을 가지는 것도 가능하다. 즉 C++ 스팩은 int를 강력히 권장하기는 하지만 강요하지는 않는다. 비주얼 C++은 int, void 모두 가능한데 과거부터 이렇게 써 왔기 때문에 호환성을 더 중요시한다는 입장이다. gcc는 표준의 권고대로 main 함수의 리턴 타입으로 int만 인정한다. main 함수가 리턴하는 값을 탈..

    [C] 문자열(String) - 문자열 저장, 널문자, 문자열 배열, 문자열 크기

    문자열(String) 문자의 집합 문자열이라고 하는 데이터 형식은 따로 존재하지 않는다. 문자열은 한문자(char)가 여러 개 이어져 있는 형태다. 문자열 저장 문자열 저장을 위해서는 문자열 길이에 1을 더한 만큼의 크기가 필요하다 왜냐하면 문자열의 끝을 표시하는 널문자(NULL, \0)가 존재하기 때문이다. 널문자 문자열의 끝을 알려주는 역할 \0, 하나의 문자로 취급, 화면에 출력 되지 않음 문자열 배열 문자열 저장 변수. 문자를 연속적으로 나열한 배열형태가 되어야 한다. 문자열의 크기) 실제 문자열 + 1 (NULL 문자) https://codedragon.tistory.com/5274

    [C] 정적변수, 지역변수, 전역변수 비교 (static, local, global)

    ☑️ 지역변수(local variable, 자동변수)는 중괄호 내부, 함수의 매개변수(Parameter)에서 사용되는 변수를 의미한다. 지역변수의 지역은 함수의 내부, 중괄호 내부를 의미한다. 따라서 함수 안에서만 접근 가능하며, 함수를 벗어나면 사라진다 (= 변수의 메모리 공간이 소멸된다). 지역변수는 초기화하지 않으면 컴파일 에러가 나거나 쓰레기값이 저장된다. 지역변수(local variable)는 자동변수(auto variable)와 같다. 자동변수는 흔히 블록(중괄호) 안에서 사용하는 변수로서, 변수가 생성된 뒤에 자동으로 사라진다고 하여 자동변수라고 부른다. 매우 흔히 사용하기 때문에 auto 키워드를 생략하고 사용한다. ☑️ 전역 변수(global variable)는 지역변수와 반대로 중괄호 ..