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
등을 통해 다국어 문자 표현도 지원됩니다. 문자형은 입출력, 문자열 조작, 메모리 처리 등 다양한 영역에서 핵심적인 역할을 수행하며, 기본 자료형 중 하나로서 프로그램의 토대를 형성합니다.