¿Dónde está el error en mi programa C que generan todas las posibles permutaciones de una cadena?

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

  •  22-08-2019
  •  | 
  •  

Pregunta

He estado tratando de escribir un programa en C que genera todas las posibles permutaciones de una cadena (por ejemplo, 123 en el código de abajo). Tuve éxito pero genera algunos valores de basura después de cada permutación posible. Por favor, ayúdame a encontrar la posible causa. ¿Tiene algo que ver con la inicialización? Código:

#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;
    }       
}
¿Fue útil?

Solución

Mi C es muy oxidada, pero mi conjetura es que es causada por el hecho de que su matriz de caracteres no está terminada en nulo.

Una opción es imprimir cada carácter individual:

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

Otros consejos

charla a cabo [3] = "asd"; // inicialización aleatoria

Cambie esto a cabo [4] para que tenga espacio para la terminación de carácter \ 0, y debería funcionar como se espera que lo haga.

Si usted piensa que debería dejar de imprimir el contenido de out después de los tres primeros caracteres, pregúntese cómo se sabría hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top