Wo ist der Fehler in meinem C-Programm, das alle möglichen Permutationen einer Zeichenkette erzeugen?

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

  •  22-08-2019
  •  | 
  •  

Frage

Ich habe versucht, ein C-Programm zu schreiben, das alle möglichen Permutationen einer Zeichenkette erzeugt (zB 123 in Code unten). Es gelang mir, aber es erzeugt einige sinnlose Werte nach jeder möglichen Permutation. Bitte helfen Sie mir die mögliche Ursache zu finden. Ist es etwas mit der Initialisierung zu tun? 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;
    }       
}
War es hilfreich?

Lösung

Meine C sehr rostig ist, aber meine Vermutung ist, dass es durch die Tatsache verursacht wird, dass Ihr Zeichenfeld Nullterminiert nicht.

Eine Möglichkeit ist, jedes Zeichen auszudrucken individuell:

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

Andere Tipps

char [3] = "asd"; // Zufall Initialisierung

Mit dieser Änderung [4] so haben Sie Raum für die abschließenden \ 0-Zeichen, und es sollte funktionieren, wie Sie es erwarten.

Wenn Sie denken, sollte es druckt den Inhalt der out nach den ersten drei Zeichen zu stoppen, fragen Sie sich, wie es wäre einfach, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top