Wo ist der Fehler in meinem C-Programm, das alle möglichen Permutationen einer Zeichenkette erzeugen?
-
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;
}
}
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.