递归方法Objective-C

时间:2016-06-26 21:46:05

标签: ios objective-c recursion

我正在检查字符串的第一个字母是0,如果它是删除它并再次调用方法检查是否仍然是0.我已经调试了这个似乎当它完成数字而没有0时,它会去向后。代码:

-(NSString *)deleteZerosOnFirst:(NSString *)card
{
    NSString *firstLetter = [card substringToIndex:1];
    if ([firstLetter isEqualToString:@"0"]) {
        card = [card substringFromIndex:1];
        [self deleteZerosOnFirst:card];
        NSLog(@"CARD: %@", card);
        return card;
    }
    else {
         NSLog(@"CARD: %@", card);
        return card;
    }

}

2 个答案:

答案 0 :(得分:3)

主要问题是您没有使用递归的结果。你自称的代码行应该这样说:

<?php

  $koneksi = mysqli_connect('mysql.idhostinger.com','root','pw','db');
  $result = mysqli_query($koneksi,'select * from posting');

  while($row = mysqli_fetch_row($result)) {

    for($x = 0; $x <= count($row); $x++) {
      echo "<div style='background:green'>$row[$x]</div>";
    }
  }
?>

此外,您在执行NSLog之前调用了deleteZerosOnFirst。颠倒这两行的顺序。这至少会以正确的顺序为您提供调试输出。

答案 1 :(得分:3)

这是你的递归电话:

    [self deleteZerosOnFirst:card];

这不会修改card引用的字符串。它创建并返回一个新字符串。你忽略了返回的字符串。你想要这个:

    card = [self deleteZerosOnFirst:card];

但这真的很简单:

@implementation NSString (withoutLeadingZeroes)

- (NSString *)withoutLeadingZeroes {
    NSString *s = self;
    while ([s hasPrefix:@"0"]) {
        s = [s substringFromIndex:1];
    }
    return s;
}

@end