2012-07-20 4 views
1

지금까지 6 일 동안이 과제에 대한 작업을 해왔습니다. 과제에 대한 더 많은 아이디어 나 방법이 없기 때문에 특별히 좌절감을 느낍니다.RPN 계산기 할당 2, descriptionOfProgram

나는 프로그램 부분에 대한 설명을하고있다. (나는 그것에 착수했으며 나머지 임무를 수행하지 않았다.) 나는 무엇을해야하는지 혼란 스럽다. 다음은 현재 구현 된 내용입니다.

+(NSString *)descriptionOfProgram:(id)program 
{ 
if (![self isValidProgram:program]) 
    return @"Invalid program!"; 
NSMutableArray *stack = [program mutableCopy]; 
return [self descriptionHelper:stack]; 
} 
+(NSString *)descriptionHelper:(NSMutableArray *)stack 
{ 
NSString *result; 
id topOfStack = [stack lastObject]; 
if (topOfStack) [stack removeLastObject]; 
if ([topOfStack isKindOfClass:[NSNumber class]]) 
{ 
    result = [topOfStack stringValue]; 
} 
else if ([topOfStack isKindOfClass:[NSString class]]) 
{ 
    result = [NSString stringWithFormat:@"(%@ %@ %@)",[self descriptionHelper:stack],topOfStack,[self descriptionHelper:stack]]; 
    return result = [self bracketHandler:result]; 
} 
return result; 
} 
+(NSString *)bracketHandler:(NSString *)stringWithBrackets 
{ 
int lengthOfString = [stringWithBrackets length]; 
NSString *newString = stringWithBrackets; 
if (lengthOfString < 8) 
{ 
    newString = [newString stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
    newString = [newString stringByReplacingOccurrencesOfString:@")" withString:@""]; 
} 
else 
{ 
    <#statements#> 
} 
return newString; 
} 

나는이 시점에서 막혔어요, 난 내 현재 구현 빨아 보인다 알고 있지만, 사실이 작업을 완료하고 인간을 표시하는 방법, 찾기 위해 무엇을 이동하는 곳의 단지 작은 안내를 원하는 모든 시간에 내 프로그램에 대한 읽을 수있는 설명을 최소한의 대괄호와 논리적 인 방법으로 제공합니다.

올바른 방향으로 조금만 밀어 주시면 감사하겠습니다. 너무 길어요.

+1

무엇이 당신의 질문입니까? –

+0

논리 형식으로 바뀔 때마다 프로그램을 포맷하고 싶습니다. 입력 내용이 2, 3, 5, +, *라고하면 2 * (3 + 5)를 인쇄해야합니다. 가능한 경우. 어디에서 시작 해야할지 알고 싶습니다. 어디서부터 시작 해야할지 모릅니다. 어떻게 NSString을 조작해야합니까? 또는 배열? 내 조건을 어떻게 시작해야하는지에 대해 알아야 할 상황이 생기면, 나는이 길을 시작하기 위해 작은 방향이 필요합니다. 특히 재귀에서 수행하고 싶다면 조금 더 어려워집니다. –

+0

이 "C++ RPN 계산기"에 대한 인터넷 검색은 어떻습니까? –

답변

0

귀하의 문제가 무엇인지 잘 모르겠 으면 확실하지 않습니다. 당신이 무엇을 당신의 문자열이 나타내는 데이터의 유형을 결정하는 어려움이 경우이 세트는 표준의 부분 집합 인 경우, 당신은 문자 집합 (NSCharacterSet* yourSet = [NSCharacterSet characterSetWithCharactersInString:yourString]) 및 테스트를 만들려고 할 수도 있습니다 설정하여 제공, 예 :

if ([[NSCharacterSet decimalDigitCharacterSet] isSupersetOfSet: yourSet]) { 
    /* integer number */ 
} else if ([[NSCharacterSet characterSetWithCharactersInString:@"*/"] isSupersetOfSet: yourSet]) { 
    /* multiplication or division */ 
} else ... 

이것은 가장 우아한 해결책은 아니지만 적용하기 쉽고 작동해야합니다.