开发者

Why doesn't this code produce the correct output? [closed]

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. 开发者_JAVA百科 Closed 12 years ago.

Given a string and a number, this function will produce all possible combinations of n letters from that string.

i.e. If I pass "abcd" and 3, then I should get the following output:

abc
abd
acd
bcd

This is the code

- (void)viewDidLoad {
    [super viewDidLoad];
    [self expand_combinations:@"abcd" arg2:@"" arg3:3];
}

-(void) expand_combinations: (NSString *) remaining_string arg2:(NSString *)s arg3:(int) remain_depth
{
    if(remain_depth==0)
    {
        printf("%s\n",[s UTF8String]);
        return;
    }

    for(int k=0; k < [remaining_string length]; ++k)
    {
        s = [s stringByAppendingString:[[remaining_string substringFromIndex:k] substringToIndex:1]];
        [self expand_combinations:[remaining_string substringFromIndex:k+1] arg2:s arg3:remain_depth - 1];
    }
    return;
}

Instead this is what it prints out

abc
abcd
abcd
abcd


Just a quick and dirty solution (didn't rename variable names and so on) for your function

-(void) expand_combinations: (NSString *) remaining_string arg2:(NSString *)s arg3:(int) remain_depth
{
    NSString *newString = [remaining_string stringByReplacingCharactersInRange:NSMakeRange(remain_depth, 1) withString:@""];
    // NSLog(newString);

    if(remain_depth==0)
    {
        printf("%s\n",[s UTF8String]);
        return;
    }
    [self expand_combinations:remaining_string arg2:s arg3:remain_depth - 1];
    return;
}

Output (I used NSLog)

2010-09-26 04:27:26.462 Untitled[5417:207] abc
2010-09-26 04:27:26.462 Untitled[5417:207] abd
2010-09-26 04:27:26.463 Untitled[5417:207] acd
2010-09-26 04:27:26.467 Untitled[5417:207] bcd


I found the solution. Here it is.

- (void)viewDidLoad {
    [super viewDidLoad];
    [self expand_combinations:@"abcd" arg2:@"" arg3:3];
}

-(void) expand_combinations: (NSString *) remaining_string arg2:(NSString *)s arg3:(int) remain_depth
{
    if(remain_depth==0)
    {
        printf("%s\n",[s UTF8String]);
        return;
    }

    NSString *str = [[NSString alloc] initWithString:s];
    for(int k=0; k < [remaining_string length]; ++k)
    {

        str = [s stringByAppendingString:[[remaining_string substringFromIndex:k] substringToIndex:1]];
        [self expand_combinations:[remaining_string substringFromIndex:k+1] arg2:str arg3:remain_depth - 1];

    }
    return;
}

The changes I made to make it work are in the line

NSString *str = [[NSString alloc] initWithString:s];

From there I replace every instance of s with str. It seems that by using s instead of str, some important value was getting overwritten which was causing the problem to not work correctly. It is necessary to create another NSString variable str so that the contents of s do not get overwritten.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜