Où est le bug dans mon programme C qui génère toutes les permutations possibles d'une chaîne?
-
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;
}
}
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.