문자열 변환 알고리즘?
글쓴이: 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 ] = { "십", "백", "천", "만" };댓글 달기