U E D R , A S I H C RSS

이영호/숫자를한글로바꾸기

(수정) 일의 자리의 "일"을 제외한 함수 (주석문 추가)
// 이제보니 Little AOI 페이지였네;;;;;;; 그냥 내주신 문제인줄 알았는데 =ㅁ=

~cpp 
/*
성공시 const char * 리턴
실패시 -1 리턴
*/
#include <string.h>

const char *change(int num)
{
	static char ret[30] = {0};		// static array for return;
	char data[7][3] = {0};			// stack
	int i;					// for for - _ - kidding. kiki~
	int buf;
	int count=0;				// 자릿수.

	if(num >= 1000000)			// 10만 자리를 넘으면 에러 return
		return -1;

	for(i=0; num>0; ++i){
		buf = num % 10;
		switch(buf){
			case 0: strcpy(data[i], "영"); break;
			case 1: strcpy(data[i], "일"); break;
			case 2: strcpy(data[i], "이"); break;
			case 3: strcpy(data[i], "삼"); break;
			case 4: strcpy(data[i], "사"); break;
			case 5: strcpy(data[i], "오"); break;
			case 6: strcpy(data[i], "육"); break;
			case 7: strcpy(data[i], "칠"); break;
			case 8: strcpy(data[i], "팔"); break;
			case 9: strcpy(data[i], "구"); break;
		}
		num /= 10;
		++count;
	}

	for(--count; count>=0 ; --count){						// stack이니 끝에서부터 다시 꺼내줌.

		// if(strcmp(data[count], "일") != 0)					// 일의 자리를 제외한 각자리의 일을 빼준다.
		strcat(ret, data[count]);
		// if(i == 0 && strcmp(data[count], "일") == 0) strcat(ret, data[count]);	// 일의 자리는 따로.

		switch(count){								// 단위 붙임.
			case 0: strcat(ret, ""); break;
			case 1: strcat(ret, "십"); break;
			case 2: strcat(ret, "백"); break;
			case 3: strcat(ret, "천"); break;
			case 4: strcat(ret, "만"); break;
			case 5: strcat(ret, "십만"); break;
		}
	}

	return ret;
}



머리 쓰기 정말 귀찮아서 생각을 전혀 안하고 손가는 대로 짰음...
생각을 안하니 이렇게 더러운 코드가 만들어지는 구나 생각했음.
아무튼 이 소스를 한달뒤에 수정하려면 생각을 많이 해야됨.
C언어의 장점인 효율적 함수 구성까지 떨어짐.
재사용은 가능하지만 수정 불가능 코드로 스스로 선언하겠음. 키키.
소스 수정할바에 새로 짠다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:33
Processing time 0.0183 sec