到目前为止,我已经为这项任务工作了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;
}
我被困在这一点上,我知道我当前的实现看起来很糟糕,但我想要一个小的指导,在哪里移动,寻找什么,如何实际完成这个任务,并显示我的可读描述用最少的括号和逻辑方式编程所有时间。
我真的很感激只是朝着正确的方向小推,我迷失了。
答案 0 :(得分:0)
我不确定,如果我明白你的问题是什么。 如果您很难确定字符串所代表的数据类型,您可能会尝试创建字符集(NSCharacterSet* yourSet = [NSCharacterSet characterSetWithCharactersInString:yourString]
)并进行测试,如果此集是标准集的子集提供,例如:
if ([[NSCharacterSet decimalDigitCharacterSet] isSupersetOfSet: yourSet]) {
/* integer number */
} else if ([[NSCharacterSet characterSetWithCharactersInString:@"*/"] isSupersetOfSet: yourSet]) {
/* multiplication or division */
} else ...
这可能不是最优雅的解决方案,但它很容易应用并且应该有效。