코딩 학습/C와 C++

C++ 메모 - 은/는, 이/가 자동 처리

이개 2026. 3. 17. 19:54

한글은 유니코드 구조 덕분에 코드로 받침 여부를 쉽게 판단할 수 있습니다.

핵심 원리:

한글 = 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() // 와 / 과