Permutationen String[] (C Code)

Ich habe den Code noch nicht nachvollzogen (sitze auch noch am alten Rechner), aber werde das vermutlich auch nicht tun, weil 4 Funktionen mit sinnfreien Namen, die sich verschachtelt rekursiv aufrufen, und bei denen tonnenweise Speicher für die Argumente ge’malloc’t wird, der nie wieder freigegeben wird, nicht dafür gedacht sind, nachvollozogen zu werden. Mal schauen ob ich heute noch was dazu basteln kann, oder noch jemand anderes was dazu sagt.

Naja, Bezeichner sind Ansichtssache, @Marco13 . An dem malloc ist aber was dran. Bisher wurde mir eigentlich gar nicht geholfen, bzw. machte ich alles selbst. Naja, ist auch nicht schlimm, es handelt sich ja auch um c. Sei nächstes Mal einfach etwas freundlicher.

Freundlich? Na gut:

Ja, Bezeichner wie printA, printB, printAB, printC, printD, Zeilen wie int i = ((a - 1) << 1) | (b - 1); /* 00-11 */ und willkürliche malloc’s und printf’s verstreut im Code sind super! ::manklatsch

Vielleicht lieber nicht
[spoiler]
Zumindest maße ich mir nicht an, dass das “gut” ist, aber … wie auch immer

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

void print(char *string, int stringLength)
{ 
    int j;
    for (j = 0; j < stringLength; j++)
    {
        printf("%c ", string[j]);
    }
    printf("
");
}
    
void increase(int *chosenIndices, int inputLength, int sampleSize)
{
    int index = sampleSize - 1;
    while (index >= 0)
    {
        if (chosenIndices[index] < inputLength - 1)
        {
            chosenIndices[index]++;
            return;
        }
        chosenIndices[index] = 0;
        index--;
    }
}

void samplingWithReplacement(char *input, int inputLength, int sampleSize)
{
    int i, j;
    int numSamples = (int)pow(inputLength, sampleSize);
    int *chosenIndices = (int*)malloc(sampleSize * sizeof(int));
    char *currentSample = (char*)malloc(sampleSize * sizeof(char));
    for (i=0; i<numSamples; i++)
    {
        for (j = 0; j < sampleSize; j++)
        {
            currentSample[j] = input[chosenIndices[j]];
        }
        print(currentSample, sampleSize);
        increase(chosenIndices, inputLength, sampleSize);
    }    
    free(currentSample);
    free(chosenIndices);
}

int main(char **args)
{
    int i;
    int numPermutations;
    int length = 4;
    char input[4];
    input[0] = 'A';
    input[1] = 'B';
    input[2] = 'C';
    input[3] = 'D';
    
    samplingWithReplacement(input, 4, 2);
    system("PAUSE");
}

[/spoiler]