사자자리

[C++] 배열 / 문자열(char, string) 본문

C++/C++ 이론

[C++] 배열 / 문자열(char, string)

renne 2022. 7. 16. 10:39

복합 데이터형

 - 기본 정수형과 부동소수점형의 조합

 

배열(Array)

 - 같은 데이터형의 집합

 

배열의 선언

데이터형	배열명[배열의크기];
short	month[12];	//month 배열의 원소들은 모두 short형이어야 한다.

 

배열의 초기화

 - 초기화는 선언할 때만 할 수 있다.

 - 배열을 부분적으로 초기화하면, 나머지 원소들은 모두 0으로 설정된다.

 - 배열을 초기화할 때 대괄호 속을 비워두면, 컴파일러가 초기화 값의 개수를 배열의 크기로 저장한다.

short month[12] = {1, 2, 3};
short credit[] = {1, 2, 3};	//배열의 크기가 자동으로 3이 된다.

 

배열의 원소를 출력하기: 인덱스

#include <iostream>
using namespace std;
int main() {
    short month[12] = { 1, 2, 3 };
    cout << month[0] << endl;	//인덱스(index): 0부터 시작
    cout << month[1] << endl;
    cout << month[2] << endl;
    return 0;
}

<실행 결과>
1
2
3

 

문자열 char

#include <iostream>
using namespace std;
int main() {
    char hello[5] = { 'H', 'E', 'L', 'L', 'O' };
    cout << hello << endl;
    return 0;
}

<실행 결과>
HELLO儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆?먢沖

 - 문자열을 출력할 때, 어디까지가 문자열인지 알려주는 null 문자(\0)가 있어야 한다.

 - null 문자가 없을 경우, 의미 없는 메모리를 돌다가 우연히 null 문자를 만날 때까지 출력을 반복한다.

 

#include <iostream>
using namespace std;
int main() {
    char hello[6] = { 'H', 'E', 'L', 'L', 'O', '\0'};	//null 문자(\0)를 끝에 넣어준다.
    cout << hello << endl;
    return 0;
}

<실행 결과>
HELLO
#include <iostream>
using namespace std;
int main() {
    char hello[] = "HELLO";	//쌍따옴표("")는 명시적으로 NULL 문자(\0)를 포함한다.
    cout << hello << endl;
    cout << sizeof(hello);
    return 0;
}

<실행 결과>
HELLO
6

 

cin 함수

 - Console Input

 - 사용자의 입력을 받는 함수

 - white space 이전까지 입력받는다.

 

strlen 함수

 - String Length

 - 문자열의 길이를 구하는 함수

#include <iostream>
#include <cstring> //strlen 함수
using namespace std;
int main() {
    const int size = 20;
    char name[size];
    
    cout << "이름을 입력하세요: " << endl;
    cin >> name;
    cout << "당신의 이름은 " << strlen(name) << "자이지만, "
         << sizeof(name) << " 바이트 크기인 배열에 저장되었습니다." << endl;
 
    return 0;
}

<실행 결과>
이름을 입력하세요:
Regulus
당신의 이름은 7자이지만, 20 바이트 크기인 배열에 저장되었습니다.

 

cin.getline(str, n);

 - (n-1)개의 문자를 str에 저장한다. 마지막은 null 문자.

 - white space를 포함해서 입력받는다.

 - 크기 n은 생략할 수 있다.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    const int size = 20;
    char name[size];
    cout << "이름을 입력하세요: " << endl;
    cin.getline(name, size);
    cout << "당신의 이름은 " << strlen(name) << "자이지만, "
         << sizeof(name) << " 바이트 크기인 배열에 저장되었습니다." << endl;
    return 0;
}

<실행 결과>
이름을 입력하세요:
Regulus Arcturus Black
당신의 이름은 19자이지만, 20 바이트 크기인 배열에 저장되었습니다.

 

문자열 string

 - char와 달리, 한 string을 다른 string에 통째로 대입할 수 있다.

 - char와 달리, 문자열의 끝에 null 문자가 들어가지 않는다.

 - 배열의 크기를 지정하지 않아도 된다. 문자열의 크기가 동적으로 변한다.

 - 인덱스를 통해 개별 문자에 접근할 수 있다.

#include <iostream>
using namespace std;
int main() {
    string str1;
    string str2 = "Black";
    
    str1 = str2;
    cout << str1 << endl;
    cout << str1[0];
    return 0;
}

<실행 결과>
Black
B
Comments