-
KMS08 : C++ 한글→숫자 변환함수 소스Program_Light 2021. 4. 10. 13:00
KMS08 - korean to integer 간단하게 한글을 수로 변형시켜주는 함수를 개발하였다. 상수와 for문으로 이루어진, 간단함 함수이며, 네이버 블로그 초창기 시절에 개발한 것이라 성능이 그렇게 뛰어나지는 않다.
안녕하세요 KMS입니다. 이번에는 지난번에 만들었다 삭제한 KtoI변환함수를 만들었습니다. 설명은 너무 복잡하므로 생략하겠습니다. 소스코드 아래있는 파일은 릴리즈 파일 입니다.
<소스>
KMS08.h
#pragma once #ifndef __KMS_08__ #define __KMS_08__ #include <iostream> #include <locale> namespace korean_KMS { namespace _for_kms08_inline_func { #define alpha_plus_0 "영" #define alpha_plus_1 "하나" wchar_t read_alpha[11] = { L"공일이삼사오육칠팔구" }; wchar_t read_beta[5] = { L"N십백천" }; wchar_t read_ceta[7] = { L"N만억조경해" }; } inline bool IsKor(const wchar_t KC) { return ((44032 <= KC) && (KC <= 55199)); } inline bool IsSame(const wchar_t x, const wchar_t y) { return (x == y); } long double Ktoi(const wchar_t* str, const long size = 10000) { long double V = 0; long double alpha = 0; long double beta = 0; bool octa = false; for (int i = 0; (i < size) && (str[i] != NULL);i++) { octa = false; if (IsSame(str[i], L'하') && IsSame(str[i + 1], L'나')) { if (alpha != 0) { beta *= 10; beta += alpha; } alpha = 1; octa = true; continue; } for (int j = 0; j < 10; j++) { if (IsSame(str[i], _for_kms08_inline_func::read_alpha[j])) { if (alpha != 0) { beta *= 10; beta += alpha; } alpha = j; octa = true; break; } } if (octa) { continue; } for (int j = 0; j < 4; j++) { if (IsSame(str[i], _for_kms08_inline_func::read_beta[j])) { if (!alpha) beta += powl(10, j); else beta += alpha * powl(10, j); alpha = 0; octa = true; break; } } if (octa) { continue; } for (int j = 0; j < 7; j++) { if (IsSame(str[i], _for_kms08_inline_func::read_ceta[j])) { if (alpha) { beta += alpha; alpha = 0; } if (!beta) V += powl(10000, j); else V += beta * powl(10000, j); beta = 0; octa = true; break; } } if (octa) { continue; } } V += beta; V += alpha; return V; } } #endif // !__KMS_08__
test_source.cpp
#include <iostream> #include <string> #include <algorithm> #include <locale> #include <cstdio> #include "KMS08.h" using namespace std; int main(void) { wcout.imbue(locale("kor")); wcin.imbue(locale("kor")); wchar_t string[200] = L"만이천삼백십"; long double V = 0; wcin >> string; V = korean_KMS::Ktoi(string, 200); wcout << string << endl; printf("%.0lf \n", V); //cout << V << endl << endl; return 0; }
<실행파일>
KMS08.exe
이상으로 KMS이였습니다. 감사합니다.
'Program_Light' 카테고리의 다른 글
KMS11 : C language ECC 키 연산 중간 보고(4 - 0.0.2) (0) 2021.04.24 KMS10 : C language RSA 키 연산 결과 보고(Arduino Due 순정) (0) 2021.04.17 KMS07 : C++ 소인수분해, 소수판별, 확장유클리드 알고리즘 소스 (0) 2021.04.03 KMS01 : 자작 Algorithm Tayo Algorithm (0) 2021.03.27 KMS04 : C++ 소수탐색 프로그램 Ver3 (source) (0) 2021.03.20