728x90

1. 배열과 문자열

#include <iostream>

using namespace std;

int main(){
//c++는 복합데이터형을 제공 : 사용자 정의대로 새로운 데이터형을 만들 수 있음
//복합데이터형 : 기본 정수형과 부동소수점형의 조합
//ex) 배열(array) : 같은 데이터형의 집합

/*배열(array)
 * typeName arrayName[arraySize]

 * 배열 초기화를 선언 이후 나중에 할 수 없음, 배열을 다른 배열에 통째로 대입할 수 없음
 * short month[5] = { ... };
 * short year[12] = { ... };
 * year = month; 불가능함
 * 초기화 값의 개수를 배열 원소의 개수보다 모자라게 제공할 수 있음
 * 배열을 부분적으로 초기화하면 나머지 원소는 모두 0으로 설정
 * 명시적으로 첫 번째 원소만 0으로 초기화하면, 나머지 원소들은 모두 0으로 초기화됨
 * 배열 사이즈를 명시하지 않으면 초기화 시의 원소 개수로 배정됨
 * */

short month[12]; //새로운 배열 선언 //month 배열의 원소는 최대 12개, 모두 short형
short month2[12] = {1, 2, 3};

cout << month2[0] << endl; //인덱스 통해 원소 출력

/*
 * 문자열: 문자의 열
 * char 리스트와 쌍따옴표로 문자열(스트링) 표현 가능
 * */

char a[5] = {'H', 'e', 'l', 'l', 'o'};
//이보다 더 효율적으로 문자열 정의하는 방법
char b[] = "Hello"; //쌍따옴표는 명시적으로 null문자를 포함하므로 스트링 표현 가능

cout << b;

}

2-1. 사용자 입력(cin)

#include <iostream>
#include <cstring>

using namespace std;

int main(){
    //<cstring>의 헤더 파일에 포함되어 있는 <strlen> : 문자열의 길이를 반환하는 함수
    //<sizeof> : 변수의 크기를 반환하는 함수
    const int Size = 15;
    char name1[Size];
    char name2[Size] = "C++programming";

    cout << "안녕 나는" <<name2;
    cout << "이야~\n";
    // cin >> name1; //사용자의 입력을 오른쪽 변수에 저장 //input느낌
    //문제는 화이트스페이스를 반영하지 못하고 그 전으로 자름
    /*이를 해결하는 것이 get & getline*/
    cin.getline(name1, Size); //(변수, 크기) //get도 마찬가지

    cout << "음 " << name1 << "씨, 당신의 이름은 ";
    cout << strlen(name1) << "자입니다만\n";
    cout << sizeof(name1) << "바이트 크기에 저장되었습니다.\n";
    cout << "이름이" << name1[0] << "자로 시작하시는군요.\n";
    name2[3] = '\0'; //문자열 출력 시 null 문자까지만 출력함
    cout << "제 이름의 세 문자는" << name2 << "입니다.";

}

2-2. string

#include <iostream>

using namespace std;

int main(){

    //c++에서 문자열을 다루는 방법 중 하나인 'string'
    /*
     * c스타일로 string 객체를 초기화할 수 있음
     * cin을 사용하여 string 객체에 키보드 입력을 저장
     * cout을 사용하여 string 객체를 보여줌
     * 배열 표기를 사용하여 string객체에 저장된 개별 문자에 접근 가능
     * => 문자열과 속성이 비슷한데,
     * => string을 통해서는 배열을 다른 배열에 통째로 대입할 수 있음 
     * => 배열 크기를 미리 지정하지 않아도 됨 */

    char char1[20];
    char char2[20] = "jauar";
    string str1;
    string str2 = "panda";
    // char1 = char2; //값이 들어가지 않음
    str1 = str2; //제대로 대입 됨
    cout << str1;

}

3. 구조체(struct)

#include <iostream>

using namespace std;

int main(){

    //c++만의 특장점: 사용자의 정의 및 입력대로 원하는 데이터를 만들 수 있음
    /*정말 중요한 '구조체'  (복합데이터형 중 하나)*/
    //배열: 같은 데이터형의 집합
    //구조체: '다른 데이터형이 허용되는' 데이터의 집합

    //축구선수
    struct MyStruct {
        string name;
        string position;
        int height;
        int weight;
    };

    MyStruct A; //A라는 이름의 MyStruct형의 데이터를 만든 것 //약간 class느낌..?
    A.name = "Son";
    A.position = "Striker";
    A.height = 183;
    A.weight = 77;

    MyStruct B = {
            "Min", "defender", 160, 49
    };

    cout << B.weight << endl;

    //구조체 생성 시 중괄호 뒤에 생성할 구조체명을 선언하면
    //실제 선언 시 구조체 형식을 전부 명시하지 않아도 됨

    //또한, 구조체에 포함된 모든 변수를 선언하지 않아도 됨, 자동으로 0이 됨

    struct Ming {
        string firstname;
        string lastname;
    } minji;

    minji.firstname = "minji";
    minji.lastname = "Jo";

    cout << minji.firstname << endl;

    //배열을 선언하듯 구조체를 선언할 수 도 있음
    Ming minfamily[2] = {
            {"jungah", "Han"}, //첫번째 인덱스에 해당하는 정보
            {"seokhyeon", "Jo"} //두번째 인덱스에 해당하는 정보
    };

    cout << minfamily[0].lastname;

}

4. 공용체 (union)

#include <iostream>

using namespace std;

int main(){

    //c++에서 지원하는 복합데이터형 중 : 공용체 & 열거체
    /*공용체(union): 서로 다른 데이터형을 한 번에 한 가지만 보관할 수 있음 */

    union MyUnion{
        int intVal;
        long longVal;
        float floatVal;
    };

    MyUnion test;
    test.intVal = 3;
    test.longVal = 33;
    test.floatVal = 3.3;

    cout << test.intVal << "\n" << test.longVal << "\n" << test.floatVal << endl;
    //1079194419
    //1079194419
    //3.3
    //여러 데이터형을 사용할 수 있지만, 동시에 사용은 불가능
    // -> 메모리 절약 가능 (운체, 하드웨어 등에 주로 활용됨)


}

5. 열거체(enum)

#include <iostream>

using namespace std;

int main(){

    //c++에서 지원하는 복합데이터형 중 : 공용체 & 열거체

    /*열거체(enum): 기호 상수(한번 선언된 이후 변경 불가)를 만드는 또다른 방법*/
    enum spectrum {red, orange, yellow, green=5};
    //1. spectrum을 새로운 데이터형 이름으로 만듦
    //2. red, orange, yellow, green의 열거자를 다양한 수를 0~3까지 정수 값을 각각 나타내는 기호 상수로 만듦
    //-> 즉 문자로 정수를 사용하게 됨
    //-> 사용된 열거자를 상수로 관리함
    // 명시적으로 정수 값을 직접 대입할 수 있음 (자동배정되는 값을 사용하지 않으려면.)
    spectrum a = orange; //열거체 생성 시, 열거자만 대입할 수 있음
    //열거자끼리 직접 산술연산 불가능 (orange+yellow//error)

    int b;
    b = green; //열거자를 int 변수에 대입하면 산술연산 사용 가능
    b = green + 3;


    cout << b << endl;

}

 

reference: https://inf.run/4ttD

728x90

+ Recent posts