[ 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;
}
'2CHAECHAE 학교생활 > 객체지향프로그래밍(C++)' 카테고리의 다른 글
[ 객체지향프로그래밍(C++) 5주차 ① ] (0) | 2022.04.01 |
---|---|
[ 객체지향프로그래밍(C++) 4주차 ② ] (0) | 2022.03.28 |
[ 객체지향프로그래밍(C++) 4주차 ① ] (0) | 2022.03.24 |
[ 객체지향프로그래밍(C++) 3주차 ① ] (0) | 2022.03.21 |
[ 객체지향프로그래밍(C++) 2주차 ] (0) | 2022.03.18 |