1

到目前为止,我已经为这个任务工作了 6 天,我特别感到沮丧,因为我没有更多的想法或方法来完成任务想要的。

我正在描述程序部分(我已经开始使用它,还没有完成其余的分配部分),我不知道该怎么做。这是我目前的实现。

+(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;
}

我被困在这一点上,我知道我当前的实现似乎很糟糕,但我只想要一个小的指导,告诉我在哪里移动、寻找什么、如何实际完成这项任务并始终显示我的程序的人类可读描述,具有最少数量的括号和逻辑方式。

请我真的很感激只是朝着正确的方向前进,我很迷茫。

4

1 回答 1

0

我不确定,如果我明白你的问题是什么。如果您难以确定您的字符串代表什么类型的数据,您可以尝试创建一个字符集 ( NSCharacterSet* yourSet = [NSCharacterSet characterSetWithCharactersInString:yourString]) 并测试该字符集是否是您提供的标准集的子集,例如:

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

这可能不是最优雅的解决方案,但是它很容易应用并且应该可以工作。

于 2012-07-22T11:58:37.993 回答