J'ai joint un code qui donne des sorties bizarres basées sur des instructions cout. Ce programme calcule essentiellement les permutations de Knuth.Knuth Permutation Algorithm Comportement bizarre
entrée est dit: run1 Le code est exécuté pour la première passe bien: trace d'appel sera:
r un1
ur n1
nur 1
1nur
n1ur
nu1r
nur1
Après cette course de code, l'appel retourne correctement à l'étape où
urn 1
est là mais il ne traite pas le code ci-dessous le "R ETURN "déclaration.
De plus, si on suppose un Cout dans la boucle où les permutations sont faites, il ne marche pas même imprimer le Cout ci-dessous la déclaration de retour
S'il vous plaît laissez-moi savoir s'il y a un défaut fondamental dans mon code ou une logique punaise ?
#include <iostream>
using namespace std;
void swap(char *l, char *m)
{
char t = *l;
*l = *m;
*m = t;
}
void Permute(char *result, char *temp, int len)
{
int k = 0;
int j = 0;
char d[ 1000000];
int i = 0;
//cout << " Start of Perm " << result << " Stack: " << temp << endl;
while(result[ i ] != '\0')
{
if(temp[ k ] !='\0')
{
cout << " Start of Perm " << result << " Stack: " << temp << endl;
strncpy(d, &temp[ k ], sizeof(char));
strncat(d, result, sizeof(result) );
strncat(d, "\0", sizeof(char));
cout << " Principal: " << d << endl;
k = k + 1;
if(temp[ k ] != '\0')
Permute(d, &temp[ k ], len);
else
{
char d1[ 10000 ];
strncpy(d1, &temp[ k ], sizeof(char));
strncat(d1, d, sizeof(d) );
strncat(d, "\0", sizeof(char));
strncpy(d, d1, sizeof(d));
//cout << "Final Level: " << d << endl;
strncpy(result, d, sizeof(d));
}
}
//cout << strlen(result) << " == length which is " << len << " and result is: " << result << endl;
if(strlen(result) >= len)
{
//cout << " Permutation Sets" << endl;
char result1[ 1000 ];
memcpy(result1, result, sizeof(result));
for(int p = 0; result1[ p ] != '\0'; p++)
{
cout << "End : " << result1 << endl;
if(result1[ p + 1 ] != '\0')
swap(&result1[ p ], &result1[ p + 1 ]);
}
return;
}
cout << " Value of I is: " << i << " and value of K is: " << k << endl;
if(result[ i + 1 ] != '\0')
{
swap(&result[ i ], &result[ i + 1 ]);
k = 0;
d[ 0 ] = '\0';
cout << "New Branch: Value = " << result << " and stack = " << temp << endl;
}
i = i + 1;
}
}
int main(int argc, char *argv[])
{
char c[100], temp[100];
cin >> c;
// cout << c << endl;
memcpy(temp, c, sizeof(c));
// cout << temp << endl;
char c1[2];
c1[0] = c[0];
c1[1] = '\0';
Permute(c1, &temp[1], strlen(c));
}
Merci!
Une meilleure description de ce qu'il devrait produire et de ce qu'il produit réellement serait utile. –
Veuillez fournir des informations sur le comportement que vous voyez et sur ce que vous attendez réellement. En l'état, ce n'est pas une question, et sera probablement fermé ("s'il vous plaît consulter mon code" n'est pas une question, désolé). –
d'entrée est de dire: run1 Le code est exécuté pour la première passe bien: trace d'appel sera: r un1 ur n1 nur 1 1nur 1nur n1ur nu1r nur1 Après la dernière série, la call renvoie correctement à l'étape où urn 1 est là mais il ne traite pas les choses sous l'instruction "RETURN". – RMR