Où est le bug dans mon programme C qui génère toutes les permutations possibles d'une chaîne?

StackOverflow https://stackoverflow.com/questions/679889

  •  22-08-2019
  •  | 
  •  

Question

Je suis en train d'écrire un programme C qui génère toutes les permutations possibles d'une chaîne (par exemple 123 dans le code ci-dessous). Je réussissais mais il génère des valeurs de déchets après chaque permutation possible. S'il vous plaît aidez-moi à trouver la cause possible. Est-il quelque chose à voir avec l'initialisation? Code:

#include <stdio.h>
void permute(char number[],char out[],int level,int used[]);
int main()
{   
    char number[] = "123";
    char out[3] = "asd";    // Random initialization
    int used[] = {0,0,0};    // To check if number has been used in the string output
    permute(number,out,0,used);
}   
void permute (char number[],char out[],int level,int used[])
{
    if (level == 3)
    {
        printf("%s\n",out);
        return;
    }
    int i;
    for(i = 0; i < 3;i++ )
    {
            if( used[i] == 1) continue;
            out[level] = number[i];
            used[i] = 1;
            permute( number, out, level + 1,used );
            used[i] = 0;
    }       
}
Était-ce utile?

La solution

Mon C est très rouillé, mais je pense qu'elle est causée par le fait que votre tableau de caractères est nulle fin non.

L'une des options est d'imprimer chaque caractère individuellement:

if (level == 3)
{
    int p;
    for(p=0 ; p<3 ; p++) {
        printf("%c", out[p]);
    }
}

Autres conseils

char out [3] = "asd"; // initialisation aléatoire

Modifier cela sur [4] de sorte que vous avez la place pour la terminaison \ 0 caractère, et cela devrait fonctionner comme vous attendez.

Si vous pensez qu'il devrait cesser d'imprimer le contenu de out après les trois premiers caractères, demandez-vous comment il savoir le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top