C домашнее задание - замена струнных петель - PullRequest
0 голосов
/ 03 декабря 2010

Я знаю, что это немного неортодоксально и, вероятно, обойдется мне в несколько отрицательных голосов, но так как это должно произойти через 1 час, и я понятия не имею, с чего начать, я решил спросить вас, ребята.m представлен строкой, которая содержит заполнители в + форме, например:

1+2+5

Мне нужно создать функцию, чтобы распечатать все возможности размещения различных комбинаций любой данной серии цифр .Т.е. для серии:

[9,8,6] // string array

Выход будет

16265
16285
16295
18265
18285
18295
19265
19285
19295

Так что для каждого ввода я получаю (количество цифр) ^ (количество заполнителей) строк вывода.Цифры 0-9, а максимальная форма строки цифр [0,1,2,3,4,5,6,7,8,9].Исходная строка может иметь много заполнителей (как и следовало ожидать, вывод может быть ОЧЕНЬ длинным).

Я должен сделать это в C, желательно без рекурсии.Опять же, я действительно ценю любую помощь, прямо сейчас я не могу быть более благодарной.

Если вы можете предложить идею, упрощенный способ решения этой проблемы, даже на другом языке или рекурсивно, онавсе равно было бы хорошо, я мог бы использовать общую концепцию и двигаться дальше.

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Он печатает их в другом порядке, но это не имеет значения. и это не рекурсивно.

#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;
};
0 голосов
/ 03 декабря 2010

Чтобы выполнить фактическую замену, вы можете использовать strchr, чтобы найти первое вхождение символа и вернуть указатель char * на него.Затем вы можете просто изменить значение указателя и bam, вы сделали замену символа.

Поскольку strchr ищет первое вхождение (перед нулевым терминатором), вы можете использовать его повторно для каждого значенияхочу заменить.

Цикл немного сложнее, но давайте посмотрим, что вы из этого сделаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...