문자열

Jaemyeong Lee·2024년 8월 4일
0

FastCampusC++

목록 보기
23/78

첫 번째 블록 (문자열 선언, 초기화, 출력, 크기와 길이 확인)

{
    char str[] = "abc";
    cout << str << endl;        // 문자열 전체 출력
    cout << str[0] << endl;     // 첫 번째 문자 출력
    cout << str[1] << endl;     // 두 번째 문자 출력
    cout << str[2] << endl;     // 세 번째 문자 출력
    cout << str[3] << endl;     // 문자열의 마지막 문자 ('\0') 출력
    cout << sizeof(str) << endl; // 배열의 크기 출력 (4, 마지막 '\0' 포함)

    cout << (int)str[0] << endl; // 'a'의 ASCII 코드 값 출력
    cout << (int)str[1] << endl; // 'b'의 ASCII 코드 값 출력
    cout << (int)str[2] << endl; // 'c'의 ASCII 코드 값 출력
    cout << (int)str[3] << endl; // '\0'의 ASCII 코드 값 출력 (0)
    cout << strlen(str) << endl; // 문자열의 길이 출력 (3, '\0' 이전까지의 길이)

    str[1] = '\0';              // 문자열의 두 번째 문자를 null 문자로 변경
    cout << sizeof(str) << endl; // 배열의 크기 출력 (4, 변함 없음)
    cout << strlen(str) << endl; // 변경된 문자열의 길이 출력 (1, '\0' 이전까지의 길이)
}
  1. char str[] = "abc";는 문자열 "abc"를 선언하고 초기화합니다. 배열의 크기는 4입니다. (마지막 null 문자 포함)
  2. sizeof(str)는 배열의 크기를 출력합니다. (4)
  3. strlen(str)는 문자열의 길이를 출력합니다. (3)
  4. 문자열을 null 문자로 변경한 후 크기와 길이를 다시 출력합니다.

두 번째 블록 (초기화된 배열의 나머지 값 확인)

{
    char str[100] = "hello";
    cout << (int)str[99] << endl; // "hello" 뒤의 나머지 값은 '\0'
}
  1. char str[100] = "hello";는 문자열 "hello"를 선언하고 초기화합니다.
  2. str[99]의 값을 출력합니다. 초기화되지 않은 나머지 부분은 모두 null 문자('\0')로 채워집니다.

세 번째 블록 (문자열 비교)

{
    char str0[] = "hello";
    char str1[] = "hello";

    // 비교가 제대로 안 됨. 주소 값 비교임
    if (str0 == str1)
        cout << "true" << endl;

    // 같으면 0 다르면 -1 또는 1
    int result = strcmp(str0, str1);
    cout << result << endl;
}
  1. char str0[] = "hello";char str1[] = "hello";는 두 개의 문자열을 선언하고 초기화합니다.
  2. str0 == str1는 문자열의 주소를 비교하므로 올바르지 않습니다.
  3. strcmp(str0, str1)는 문자열을 비교하고 결과를 반환합니다. 같으면 0, 다르면 -1 또는 1을 반환합니다.

네 번째 블록 (문자열 복사)

{
    // 문자열 복사
    char str0[100];
    char str1[] = "hello";

    strcpy(str0, str1);
}
  1. char str0[100];char str1[] = "hello";를 선언하고 초기화합니다.
  2. strcpy(str0, str1);를 사용하여 str1의 내용을 str0에 복사합니다.

다섯 번째 블록 (문자열 연결)

{
    // 문자열 붙이기
    char str0[100] = "hello";
    char str1[] = "world";

    strcat(str0, str1);
}
  1. char str0[100] = "hello";char str1[] = "world";를 선언하고 초기화합니다.
  2. strcat(str0, str1);를 사용하여 str1의 내용을 str0에 연결합니다.

여섯 번째 블록 (문자열을 정수로 변환)

{
    // 문자열을 정수로 변경
    char str[] = "100";
    int num = atoi(str);
}
  1. char str[] = "100";를 선언하고 초기화합니다.
  2. atoi(str);를 사용하여 문자열을 정수로 변환합니다.

일곱 번째 블록 (문자열을 실수로 변환)

{
    // 문자열을 실수로 변경
    char str[] = "1.1";
    float num = atof(str);
}
  1. char str[] = "1.1";를 선언하고 초기화합니다.
  2. atof(str);를 사용하여 문자열을 실수로 변환합니다.

여덟 번째 블록 (정수를 문자열로 변환)

{
    // 정수를 문자열로 변경
    int num = 100;
    char str[100];

    sprintf(str, "%d", num);
}
  1. int num = 100;을 선언하고 초기화합니다.
  2. sprintf(str, "%d", num);를 사용하여 정수를 문자열로 변환합니다.

아홉 번째 블록 (문자열 입력)

{
    char str[6];
    // 5개 이상의 문자열을 입력 받게 되면 문제
    // 공백이 있는 경우 공백 앞까지만 입력 받음(a b 라고 입력하면 a만 받음)
    // cin >> str;

    // 5개만 입력을 받고 개행 문자까지만 받음
    cin.getline(str, 6);
    cout << str << endl;
}
  1. char str[6];를 선언합니다.
  2. cin.getline(str, 6);를 사용하여 최대 5개의 문자를 입력받고 null 문자('\0')를 추가합니다.
  3. 입력된 문자열을 출력합니다.

정리

C 스타일 문자열은 char 배열로 구현되며, 문자열의 끝은 항상 null 문자('\0')로 표시됩니다. 문자열의 길이는 strlen 함수를 사용하여 측정할 수 있으며, 배열의 크기는 sizeof를 사용하여 확인할 수 있습니다. 문자열 비교는 strcmp를 사용하며, 문자열 복사와 연결은 각각 strcpystrcat을 사용합니다. 문자열과 정수/실수 간의 변환은 atoi, atof, sprintf 등을 사용하여 수행할 수 있습니다. cin.getline을 사용하여 안전하게 문자열을 입력받을 수 있습니다. C 스타일 문자열은 다루기 쉽지만, 메모리 관리와 경계 검사를 철저히 해야 합니다. C++에서는 std::string을 사용하는 것이 더 안전하고 편리합니다.

profile
李家네_공부방

0개의 댓글