본문 바로가기
반응형

프로그래밍 언어/C 언어39

[C] 문자열 배열과 문자열 배열 동적 할당 문자열 배열과 문자열 배열 동적 할당 문자열의 배열을 2차원배열을 쓸 때의 문제점 C언어는 Java나 C++처럼 문자열을 다루는 string 자료형이 없다. 대신에 문자열은 널 문자로 끝나는 문자(char) 타입의 배열을 사용한다. 즉, 일련의 문자열 집합을 다루려면 문자열의 배열을 사용한다. 여러 개의 문자열을 저장하기 위해서는 2차원 문자 배열을 사용한다. char animal[5][20] = {"cat", "horse", "dog", "tiger", "eiephant"}; 위의 경우, 크기가 일정하게 고정하여 생성해야 하므로, 각 문자열의 길이가 제각각 다르다면 메모리 낭비될 수 있습니다. 그렇기에 초기 C언어에서는 2차원 배열을 사용하는 방법이 추천되지는 않았다. 문자열 포인터의 배열 문자열은 c.. 2021. 3. 20.
[C] 함수의 선언 함수의 선언 함수의 가장 큰 목적은 재활용에 있습니다. (소스의 반복을 줄일 수 있음) int Add(int x, int y){ int result = x + y; return result; } ① 반환형 ② 함수의 이름 ③ 매개변수 ④ 값의 반환 함수 선언의 경우에는 일반적으로 main문 보다 앞서 작성해야 C 컴파일러가 이를 문제 삼지 않는다. 하지만 코드 가독성상 main문의 흐름을 읽는 것이 중요하기 때문에 함수 원형(prototype)만 간단히 적을 수 있습니다. ※ 매개변수에는 매개변수의 개수 및 자료형 정보만 포함되면 됩니다. 즉, 별도 이름이 없어도 됩니다. 함수의 원형은 컴파일러에게 함수의 이름, 전달인자의 개수와 형태, 리턴값의 형태를 알려주는 역할이기 때문입니다. int Add(int.. 2021. 3. 19.
[C] 문자열 관련 함수 문자열 관련 함수 strlen() 문자열의 길이 strcmp() 문자열 A가 문자열 B보다 사전적으로 앞에 있으면 -1, 뒤에 있으면 1 strcpy() 문자열 복사 strcat() 문자열 A에 문자열 B를 더합니다. strstr() 문자열 A에 문자열 B가 어떻게 포함 여부 반환 strlen (문자열의 길이를 반환하는 함수) #include 필요 참고로 strlen 함수의 반환형은 size_t이니, 반환 값을 unsigned int형에 저장하고 %u로 출력하는 것이 정확하나 문자열이 아무리 길어도 int형에 저장이 가능하기 때문에 반환 값을 int형 변수에 저장하고 %d로 출력하는 것이 흔함. strcpy, strncpy (문자열을 복사하는 함수) strncpy()의 경우 str1에 저장된 문자열을 s.. 2021. 3. 19.
[C] 구조체 (structure) 구조체(structure)는 연관 있는 데이터를 하나로 묶을 수 있는 자료형으로 데이터의 표현 및 관리가 용이해진다. #define _CRT_SECURE_NO_WARNINGS #include struct point { int x, y; }; int main(void) { struct point pos; scanf("%d %d", &pos.x, &pos.y); printf("%d %d", pos.x, pos.y); } 구조체 변수의 선언과 초기화 구조체를 정의함과 동시에 변수를 선언할 수 있으며, 선언과 동시에 구조체 멤버에 값을 할당할 수도 있다. ※ 초기화하지 않은 일부 멤버는 Default 값으로 초기화 #include struct point { int x, y; }pos, pos2; int main.. 2021. 3. 19.
[C] 조건문 (Switch문 예제) 조건문에는 if문과 switch문이 존재 switch 문에는 char, int, long, double 등의 자료형을 사용할 수 있습니다. * 주로 if문으로 처리하는 경우가 많지만 입력데이터 성격이나 가독성을 위해 Switch문이 사용되기도 합니다. swtich문 예시 - 각 case별 break문 처리를 해주어야 합니다. - else문과 비슷한 장치로 default문 존재. 2021. 3. 19.
[C/C++] time(), clock()으로 실행시간 측정 ※ time(), clock() 함수를 사용하기 위해서는 파일을 include 한다. time() 함수 #include #include int main() { int sum = 0; time_t start = time(NULL); for (int i = 0; i < 10000; i++) for (int j = 0; j < 10000; j++) sum += i * j; time_t end = time(NULL); printf("소요시간: %lf\n", (double)(end - start)); } - time(NULL) 함수를 이용한 방법으로 ms가 아닌 초(second) 단위로 측정. * 소요시간은 실행할 때마다 다르게 측정될 수 있지만 PS에서 1억 Size (108)를 탐색할 때 1초 정도 소요. c.. 2021. 3. 19.
[C] 중첩 for문 (한번에) 빠져나오기 이중 for문을 구현하다보면 내부 for문에서 한번에 빠져나오고 싶은 경우가 있습니다. break문은 현재 소속된 for문에서 빠져나오기 때문에 아래 3가지 정도의 테크닉을 통해 구현할 수 있습니다. ① "flag" 변수와 같은 별도 변수를 통한 처리 (구현 내용에 따라 증감되는 변수의 조건을 이용할 수도 있습니다.) #include int main() { int cnt = 0; while (true) { while (true) { if (cnt >= 10) break; cnt++; } if (cnt >= 10) break; } } ② 외부 for문이 끝나는 조건을 내부 for문이 끝날 때 동시에 설정하기 ※ for문인 경우, 바깥쪽에서 별도 변수나 if문 처리를 하지 않기 때문에 권장 #include .. 2021. 3. 19.
[C / C++] 난수 생성 (rand, srand, time) 해당 게시글은 난수를 생성하는 rand, srand, time 함수에 대해서 다룹니다. ※ Random한 값을 난수라고 표현합니다. ※ 실행할 때마다 다르게 난수를 생성하는 방법은 ③ srand() 인자로 시간을 인자로 주는 형태입니다. ① rand 필요한 헤더파일: C언어 / C++ #include #include int main(void){ for (int i = 0; i < 5; ++i) { printf("rand : %d\n", rand()); } } 랜덤한 숫자이기 하지만 실행할 때마다 동일한 (랜덤) 숫자를 생성하는 단점이 있습니다. 생성되는 난수의 범위는 0 ~ RAND_MAX 까지 입니다. (RAND_MAX는 0x7fff로 10진수로 0 ~ 32767가 생성 범위 입니다. ※ RAND_MA.. 2021. 2. 23.
[예제] srand()를 이용한 1~10까지의 난수 생성 해당 게시글에서는 10개의 숫자를 랜덤하게 생성할 때, 1~10까지의 숫자 중 랜덤하게 가지는 방법과 1~10까지 숫자를 중복없이 랜덤하게 배치하는 방법을 소개합니다. ([C / C++] 난수 생성 (rand, srand, time) 보고 오시면 좋습니다.) srand()와 rand()를 통해서 0 ~ 32767을 랜덤하게 추출할 수 있었습니다. 1~10까지의 숫자를 랜덤하게 추출하는 방법은 나머지 연산을 이용하는 것입니다. → rand() % MOD #include #include #include const int SIZE = 10; int idx, list[SIZE]; int main() { srand(time(NULL)); while (idx < SIZE) { int val = rand() % SI.. 2021. 2. 23.
반응형