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 に答える