Objective c 如何从几个字符串中提取一个字符串?Xcode

Objective c 如何从几个字符串中提取一个字符串?Xcode,objective-c,xcode,string,recursion,stack,Objective C,Xcode,String,Recursion,Stack,我制作了一些方法,从堆栈中提取数字和操作数,并以更友好的方式显示。问题在于descriptionString变量,当topOfStack为“+”时,它部分返回null。我在下面显示一个日志 +(NSString *)descriptionOfTopOfStack:(NSMutableArray *)stack { NSString *descriptionString; id topOfStack = [stack lastObject]; NSString *seco

我制作了一些方法,从堆栈中提取数字和操作数,并以更友好的方式显示。问题在于descriptionString变量,当topOfStack为“+”时,它部分返回null。我在下面显示一个日志

+(NSString *)descriptionOfTopOfStack:(NSMutableArray *)stack
{

    NSString *descriptionString;
    id topOfStack = [stack lastObject];
    NSString *secondInStack;
    NSString *thirdInStack;
    if (topOfStack)
    [stack removeLastObject];    
    if ([topOfStack isKindOfClass:[NSNumber class]]) {
        descriptionString = [topOfStack stringValue];
    }
    else if([topOfStack isKindOfClass:[NSString class]]){
        if(([topOfStack isEqualToString:@"+"]) || ([topOfStack isEqualToString:@"—"])){
            secondInStack = [self descriptionOfTopOfStack:stack];
            thirdInStack = [self descriptionOfTopOfStack:stack];
           descriptionString = [descriptionString stringByAppendingFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack]; 
          NSLog(@"description is %@",descriptionString);

        }

    }
    return descriptionString;
}
我用2+6做了一个例子,这是log:

  • 2012-02-21 22:09:39.983计算器[12536:f803]堆栈=( 2. 6. "+" )
  • 2012-02-21 22:09:39.983计算器[12536:f803]说明为空

为什么descriptionString为空?我哪里出错了?谢谢

我怀疑您没有在
if
的另一个分支中设置
descriptionString
变量的值,因此您将字符串附加到
null
。您可以设置变量,也可以使用
[nsstringwithformat:format]

if ([topOfStack isKindOfClass:[NSNumber class]]) {
    descriptionString = [topOfStack stringValue];
}
else if([topOfStack isKindOfClass:[NSString class]]){
    if(([topOfStack isEqualToString:@"+"]) || ([topOfStack isEqualToString:@"—"])){
        secondInStack = [self descriptionOfTopOfStack:stack];
        thirdInStack = [self descriptionOfTopOfStack:stack];
       descriptionString = [NSString stringWithFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack]; 
      NSLog(@"description is %@",descriptionString);

    }

}
行中:

descriptionString = [descriptionString stringByAppendingFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack];
变量
descriptionString
nil
。将该行替换为以下内容

descriptionString = [NSString stringWithFormat:@"%@ %@ %@",thirdInStack,topOfStack,secondInStack];

这是一个经典的计算机科学作业。。。。