본문 바로가기
2CHAECHAE 학교생활/객체지향프로그래밍(C++)

[ 객체지향프로그래밍(C++) 3주차 ② ]

by 2CHAE._.EUN 2022. 3. 21.

[ 3주차 - 2 ]

 

일차원 배열

 

#자료형 배열의이름[원소의개수];

int sample[10];

 

배열의 크기 = 자료형의 바이트 수 * 원소의 수

 

#include <iostream>
using namespace std;

int main() {
	int sample[10];
	
	for (int t = 0; t < 10; ++t) {
		sample[t] = t;
	}

	for (int t = 0; t < 10; ++t) {
		cout << sample[t] << ' '; # 0 1 2 3 4 5 6 7 8 9
	}
    
    return 0;
}

 

하나의 배열을 다른 배열에 치환할 수 없다. → 반복문을 사용해서 원소 하나하나를 넣어줘야함

int a[10], b[10];

a = b; # 에러

 

c++은 배열의 경계를 확인하지 않아 크키가 n인 배열에서 n 이상으로 인덱싱하는 것이 가능하다.

프로그램을 작성할 때 선언되어있는 배열의 크기를 넘지 않도록 조심해야한다.

 

 

문자열( String )

 

큰 따옴표로 둘러 쌓인 문자들의 리스트

널(null)문자로 끝나는 문자 배열 → 널 문자는 직접 추가할 필요없이 컴파일러가 자동으로 생성한다.

널 종료 문자 때문에 최대 문자열보다 1문자 더 길게 선언이 되어야한다.

char str[6] = "Hello";

# H e l l o '\0'

 

#include <iostream>
using namespace std;

int main() {
	char str[80];
	cout << "Enter a string : ";
	cin >> str;
	cout << "Here is your string : ";
	cout << str;

	return 0;
}

 

입력받은 실제 str은 this 하나밖에 없다. 그 이유는 cin에 하나의 문자열 변수 str을 주게 된다면 space와 space 사이를

하나의 문자열로 취급하기 때문에 str에는 this 밖에 들어가지 않는다.

 

전체를 하나의 문자열로 입력받기 위해서는 gets_s()를 사용해야 한다.

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
	char str[80];
	cout << "Enter a string : ";
	gets_s(str); // 키보드에서 문자열을 읽는다.
	cout << "Here is your string : ";
	cout << str;

	return 0;
}

 

< 문자열 라이브러리 함수 >

strcpy( to,from );
// from 문자열의 내용을 to로 복사

strcat( s1,s2 );
// s2를 s1의 끝에 붙이고 s2는 변하지 않는다.

strcmp( s1,s2 );
// 두 개의 문자열을 비교해 같으면 0을 반환한다.
// s1 > s2 일 경우 양수가 반환되고 s1 < s2 라면 음수가 반환

strlen(s);
// s가 가리키는 문자열의 길이를 반환한다.

 

 

2차원 배열

 

일차원 배열들의 리스트

배열의 크기 = 행의 수 * 열의 수 * 자료형의 바이트 수

 

#include <iostream>
using namespace std;

int main() {
	int t, i, num[3][4];

	// 안 -> 열, 밖 -> 행
	for (t = 0; t < 3; ++t) {
		for (i = 0; i < 4; ++i) {
			num[t][i] = (t * 4) + i + 1;
			cout << num[t][i] << '\t';
		}
		cout << "\n";
	}
	return 0;
}

 

 

배열의 초기화

 

//자료형 배열의이름[크기] = {value-list};

int my_list[10] = {1,2,3,4,5,6,7,8,9,10};

char str[6] = "hello";
char str[6] = {'h','e','l','l','o','\0'};

 

value-list는 배열의 자료형과 일치하는 값들의 리스트이며, 콤마로 구분한다.

 

 

< 가변 길이의 배열 초기화 >

 

배열의 초기화 문장에 배열의 크기를 명시하지 않으면 c++이 자동으로 초기값을 충분히 저장할 수 있는

크기의 배열을 생성한다.

char e1[] = "Divide by 0\n"; // 13

 

다차원 배열에 대해서는 맨 왼쪽 차원을 제외한 모든 차원을 명시해야한다.

int square[][2] = {
	1,1,
    	2,4,
    	3,9};

 

#include <iostream>
using namespace std;

int main() {
	int t, i;

	char text[100][80]; 
	//첫번째 칸 : 문자열의 수 / 두번째 칸 : 각 문자열의 최대길이
	//여러 줄을 입력해야 하는 경우는 2차원 배열로 선언을 해야한다.
    	//80은 한 줄의 문자열이고 100은 100줄까지 저장하겠다라는 뜻

	for (t = 0; t < 100; t++) {
		cout << t << ": ";
		gets_s(text[t], 80);
		if (!text[t][0]) { //빈줄이면 끝내기
        	//맨 첫글자가 null인지 아닌지 체크 -> null이라면 false가 반환됨
			break;
		}
	}
	for (i = 0; i < t; i++) {
		cout << text[i] << '\n';
	}

	return 0;
}

 

 

 

실습하기

 

빈 라인이 입력될 때까지 문장들을 입력받아서 문자열에 있는 공백, 콤마, 마침표의 수를 세는 프로그램 작성하기

switch문 사용하기

#include <iostream>
using namespace std;

int main() {
	char text[100][80];

	int a = 0;
	int b = 0;
	int c = 0;

	for (int i = 0; i < 100; i++) {
		gets_s(text[i], 80);
		if (!text[i][0]) {
			break;
		}
		for (int j = 0; text[i][j] != '\0'; j++) {
			switch (text[i][j]) {
			case ' ':
				a++;
				break;
			case ',':
				b++;
				break;
			case'.':
				c++;
				break;
			}
		}
	}



	cout << "공백 : " << a << " 쉼표 :" << b << " 마침표 : " << c;

	return 0;

}