문자열 변환 알고리즘?
글쓴이: nayana / 작성시간: 목, 2005/01/27 - 7:40오후
Quote:
☞ 입력
“이백원, 육백원, 삼천사백원, 오백칠십원, -구백사십원”☞ 출력
“삼천팔백삼십원”☞ 처리조건
* 문자열로 된 값을 입력받아, 모두 더한 값을 문자열로 출력한다.
* 마이너스 값이 올 수 있으며, 기호는 ‘-’ 문자를 사용한다.
* 최대 단위는 ‘억’ 단위이며, 그 이상은 에러처리를 한다.
제 나름대로 코딩을 해보았는데.
#include <iostream> using std::cout; using std::cin; using std::endl; #include <cstring> #include <cstdlib> int ToCurr( char *cStrPtr ) { char *a[ 9 ] = { "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" }; char *b[ 4 ] = { "십", "백", "천", "만" }; int c[ 4 ] = { 10, 100, 1000, 10000 }; int i , j, l, temp = 0, su = 0; // 문자열의 길이 l = strlen( cStrPtr ); // 변환 시작 for( i = 0; i < l; i += 2 ) { for( j = 0; j < 9; j++ ) { if( strncmp( cStrPtr + i, a[ j ], 2 ) == 0 ) temp += j + 2; } for( j = 0; j < 4; j++ ) { // 십,백,천 자리의 경우 if( strncmp( cStrPtr + i, b[ j ], 2 ) == 0 && b[ j ]!= "만" ) { temp *= c[ j ]; su += temp; temp = 0; } // 만자리의 경우 else if( strncmp( cStrPtr + i, b[ j ], 2 ) == 0 && b[ j] == "만" ) { temp *= c[ j ]; su *= c[ j ]; su += temp; temp = 0; } } } // 단자리 수를 위한 마지막 처리 if( temp != 0 ) su += temp; return su; } int main( void ) { char cInStr[ 100 ] = ""; int iStrNumber; cout << "[문제2]문자열 숫자를 입력받아 합계하는 프로그램을 만드시오.\n"; cout << "문자열 숫자 입력==>"; cin.getline( cInStr, 100 ); cout << "원래의 문자열= " << cInStr << endl; iStrNumber = ToCurr( cInStr ); cout << "변환된 숫자값= " << iStrNumber << endl; return 0; }
"마이너스" 구현 문제와 문자열로 변환시키는것이 생각보다 까다롭습니다.
같이 고민해 볼려고 이렇게 질문을 드립니다.
고수님들 조언 부탁드리겠습니다.
Forums:
'십, 백, 천'과 '만, 억'은 따로 배열로 분리하셔야 할 것 같군요.
'십, 백, 천'과 '만, 억'은 따로 배열로 분리하셔야 할 것 같군요. 우리나라 숫자 읽는 법은 만단위마다 십, 백, 천이 붙으니까요.
노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5
[code:1]char *b[ 4 ] = { &q
char *b[ 4 ] = { "십", "백", "천", "만" };
댓글 달기