开发者

C homework - string loops replacements

I know it's a little unorthodox and will probably cost me some downvotes, but since it's due in 1 hour and I have no idea where to begin I thought I'd ask you guys.

Basically I'm presented with a string that contains placeholders in + form, for example:

1+2+5

I have to create a function to print out all the possibilities of placing different combinations of any given series of digits. I.e. for the s开发者_运维知识库eries:

[9,8,6] // string array

The output will be

16265
16285
16295
18265
18285
18295
19265
19285
19295

So for each input I get (number of digits)^(number of placeholders) lines of output. Digits are 0-9 and the maximum form of the digits string is [0,1,2,3,4,5,6,7,8,9]. The original string can have many placeholders (as you'd expect the output can get VERY lengthly).

I have to do it in C, preferably with no recursion. Again I really appreciate any help, couldn't be more thankful right now.

If you can offer an idea, a simplified way to look at solving this, even in a different language or recursively, it'd still be ok, I could use a general concept and move on from there.


It prints them in different order, but it does not matter. and it's not recursive.

#include <stdlib.h>
#include <stdio.h>

int // 0 if no more.
get_string(char* s, const char* spare_chr, int spare_cnt, int comb_num){
    for (; *s; s++){
        if (*s != '+') continue;
        *s = spare_chr[comb_num % spare_cnt];
        comb_num /= spare_cnt;
    };
    return !comb_num;
};

int main(){
    const char* spare_str = "986";
    int num = 0;
    while (1){
        char str[] = "1+2+5";
        if (!get_string(str, spare_str, strlen(spare_str), num++)) 
            break; // done
        printf("str num %2d: %s\n", num, str);
    };
    return 0;
};


In order to do the actual replacement, you can use strchr to find the first occurrence of a character and return a char * pointer to it. You can then simply change that pointer's value and bam, you've done a character replacement.

Because strchr searches for the first occurrence (before a null terminator), you can use it repeatedly for every value you want to replace.

The loop's a little trickier, but let's see what you make of this.

0

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜