한글은 유니코드 구조 덕분에 코드로 받침 여부를 쉽게 판단할 수 있습니다.
핵심 원리:
한글 = 0xAC00 + (초성 * 21 * 28) + (중성 * 28) + 종성
그래서
(글자 - 0xAC00) % 28
이 값이
- 0이면 받침 없음
- 0이 아니면 받침 있음
C++ 코드 예제 (을/를)
#include <iostream>
#include <string>
using namespace std;
bool hasFinalConsonant(const string& word)
{
unsigned int lastChar = word.back();
if (lastChar >= 0xAC00 && lastChar <= 0xD7A3)
{
int index = lastChar - 0xAC00;
return (index % 28) != 0;
}
return false;
}
string getEulReul(const string& word)
{
if (hasFinalConsonant(word))
return "을";
else
return "를";
}
int main()
{
string word = "사과";
cout << word << getEulReul(word) << " 먹었다." << endl;
return 0;
}
출력 예:
사과를 먹었다
밥을 먹었다
이/가도 같은 방식
string getIGa(const string& word)
{
if (hasFinalConsonant(word))
return "이";
else
return "가";
}
사용 예 (게임 메시지)
string monster = "고블린";
cout << monster << getIGa(monster) << " 공격했다!" << endl;
출력
고블린이 공격했다!
슬라임이 공격했다!
늑대가 공격했다!
⚠️ 중요한 것 (C++에서 한글)
std::string은 UTF-8이라서 word.back()이 항상 한 글자가 아닐 수도 있습니다.
그래서 Windows 콘솔에서는 wstring이 더 안전합니다.
예:
wstring word = L"사과";
RPG 만들 때 보통 만드는 함수
보통 4개 만듭니다.
getEulReul() // 을 / 를
getIGa() // 이 / 가
getEunNeun() // 은 / 는
getWaGwa() // 와 / 과
'코딩 학습 > C와 C++' 카테고리의 다른 글
| C++ 기초 - 언리얼 엔진 기본 개념 (0) | 2026.03.19 |
|---|---|
| C++ 기초 - 스택, 큐 (0) | 2026.03.18 |
| C++ 기초 - 디자인 패턴(싱글톤, 데코레이터, 옵저버) (0) | 2026.03.17 |
| C++ 기초 - 객체지향 설계 (1) | 2026.03.16 |
| C++ 헷갈리는 개념 정리 (0) | 2026.03.13 |