13. C++ 문자형

1. 개요

1.1 문서 개요

이 문서는 C++에서의 문자형(char 타입)에 관해 기록하는 문서입니다. 또한 문자형이 메모리와 데이터 표현에서 어떤 역할을 수행하는지, 그리고 문자열 처리 및 입출력과 어떤 연관이 있는지를 설명합니다. C++의 기본 자료형 중 하나인 char는 단일 문자를 표현할 때 사용되며, 내부적으로는 정수형 데이터로 취급됩니다. 문자형은 문자열 처리, 텍스트 파일 입출력, 네트워크 통신 등 다양한 영역에서 기초적인 역할을 담당합니다.

2. 내용

2.1 문자형(char)의 정의와 특징

2.1.1 char 타입의 저장 구조

char는 1바이트(8비트)의 메모리를 사용하며, 정수로 저장됩니다. 일반적으로 부호 있는 정수형(signed char)으로 처리되며, 범위는 다음과 같습니다:

  • signed char: -128 ~ 127
  • unsigned char: 0 ~ 255

이는 내부적으로 문자를 ASCII 코드로 저장하기 때문입니다. 예를 들어 문자 'A'는 10진수로 65, 2진수로는 01000001로 저장됩니다.

2.1.2 ASCII 코드와 문자 매핑

C++의 문자형은 ASCII 코드 표와 직접적으로 연결되어 있습니다. 다음은 주요 문자와 ASCII 코드의 매핑 예시입니다:

문자 ASCII (10진수) ASCII (16진수)
‘A’ 65 0x41
‘a’ 97 0x61
‘0’ 48 0x30
‘ ‘ 32 0x20
‘\n’ 10 0x0A

문자형은 정수형으로도 연산이 가능하므로, 문자 간의 연산이나 비교도 가능합니다.

2.2 문자형의 종류와 확장

2.2.1 signed char, unsigned char

기본 char 타입은 컴파일러 설정에 따라 signed 또는 unsigned로 해석될 수 있습니다. 이를 명시적으로 지정하는 것이 좋습니다.

  • signed char: 음수 표현 가능
  • unsigned char: 0~255 범위에서의 바이너리 데이터 처리에 유용

2.2.2 wchar_t, char16_t, char32_t

C++11 이후부터는 유니코드 문자를 처리하기 위한 확장 문자형이 도입되었습니다.

  • wchar_t: 플랫폼에 따라 2 또는 4바이트
  • char16_t: UTF-16 인코딩을 위한 2바이트 정수형
  • char32_t: UTF-32 인코딩을 위한 4바이트 정수형
char c = 'A';           // ASCII 문자
wchar_t wc = L'한';     // 유니코드 문자 (와이드 문자)
char16_t uc16 = u'한';  // UTF-16 문자
char32_t uc32 = U'한';  // UTF-32 문자

2.3 문자형과 문자열

2.3.1 C 스타일 문자열

C 스타일에서는 char 배열을 문자열로 사용하며, 반드시 null 문자(\0)로 종료되어야 합니다.

char str[] = "Hello";  // 'H', 'e', 'l', 'l', 'o', '\0'

문자열 상수는 읽기 전용이므로, 수정하려면 char[]에 복사하여 사용해야 합니다.

2.3.2 std::string 클래스

C++에서는 문자열 처리를 위해 std::string 클래스를 사용합니다. 내부적으로 char 배열을 래핑한 객체이며, 다양한 문자열 조작 기능을 제공합니다.

#include <string>
std::string s = "Hello";
s += " World";  // 문자열 연결

2.4 문자형과 입출력

2.4.1 문자 단위 입출력

단일 문자 입출력에는 cin.get(), cout.put() 등을 사용합니다.

char ch;
std::cin.get(ch);   // 문자 하나 입력
std::cout.put(ch);  // 문자 하나 출력

2.4.2 형 변환과 정수 연산

char는 정수형이므로 산술 연산 및 형 변환이 가능합니다.

char a = 'A';
int code = static_cast<int>(a);  // 65
char next = a + 1;               // 'B'

2.5 실전 예제

2.5.1 문자열에서 대문자를 소문자로 변환

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World!";
    for (char& c : str) {
        if (c >= 'A' && c <= 'Z') {
            c = c + ('a' - 'A');
        }
    }
    std::cout << str << std::endl;  // 출력: hello world!
    return 0;
}

2.5.2 문자열의 문자 빈도수 계산

#include <iostream>
#include <string>
#include <map>

int main() {
    std::string str = "banana";
    std::map<char, int> freq;

    for (char c : str) {
        freq[c]++;
    }

    for (auto& p : freq) {
        std::cout << p.first << ": " << p.second << std::endl;
    }
    return 0;
}

3. 마무리

C++에서 문자형은 단일 문자 데이터를 저장하고 처리하기 위한 기본 단위입니다. ASCII 코드와의 직접적인 연결을 통해 문자 연산이 가능하며, C 스타일 문자열 또는 C++의 std::string 클래스와 함께 폭넓게 활용됩니다. 또한 wchar_t, char16_t, char32_t 등을 통해 다국어 문자 표현도 지원됩니다. 문자형은 입출력, 문자열 조작, 메모리 처리 등 다양한 영역에서 핵심적인 역할을 수행하며, 기본 자료형 중 하나로서 프로그램의 토대를 형성합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

error: Content is protected !!
위로 스크롤