Diese Funktion ist entworfen, um ein falsch geschriebenes Wort zu nehmen und zu permutieren, jede vollständige Permutation gegen eine Liste von Wörtern zu prüfen, bis es eine Übereinstimmung findet.Exit Rekursion nach dem ersten Wort Übereinstimmung
Sobald eine Übereinstimmung gefunden wurde, soll die Funktion das übereinstimmende Wort beenden und sofort zurückgeben, ohne weiter zu permutieren.
In seinem aktuellen Zustand funktioniert die Funktion, aber es wird weiter vertauscht und gefunden, bis alle Permutationen abgeschlossen sind.
Die Funktion find() kann als ein schwarzes Feld betrachtet werden, das wahr zurückgibt, wenn das Wort mit einem Wort im dcnV-Vektor übereinstimmt, und falsch, wenn dies nicht der Fall ist. Diese Funktion funktioniert ordnungsgemäß.
dcnV: Ein Vektor von Strings, der eine Liste von Wörtern aus dem Wörterbuch enthält.
pos: Vom Rekursionsalgorithmus verwendete Ganzzahl.
p []: Lösungsmatrix.
verwendet []: Array, das verfolgt, welche Indizes in der aktuellen Permutation verwendet wurden.
Wort: ein Wort, das von der aufrufenden Funktion (kommt aus einer Textdatei) in diese Funktion übergeben wurde.
string permute (vector <string> dcnV , int pos , int p [] ,
int used [] , string & word)
{
string tgt = word; //sets tgt to have the same size as word
unsigned int n = word.size(); //determines for loop range
unsigned int i = 0; //iterator
/* base case: when the end of the array is reached,
* map tgt to word using p array indexes
* search dictionary vector dcnV for matching word
* if found, return tgt
*/
if (pos == n && p [0] == 0 && p [n - 1] == n - 1)
{
for (i = 0; i < n; i++)
{
tgt [i] = word [p[i]];
}
if (find (dcnV , tgt))
{
cout << "\n Found matching word: " << tgt;
return tgt;
}
}
// recursive permutation algorithm. this is functioning correctly
for (i = 0; i < n; i++)
{
if (used [i] == 0)
{
p [pos] = i;
used [i] = 1;
permute (dcnV , pos + 1 , p , used , word);
used [i] = 0;
}
}
// if end of fn is reached without match, return tgt with '*' appended in
// front
return "*" + word;
}
versuchten Lösungen, die nicht funktionieren:
eines statischen Vektors unter Verwendung timmender Wörter zu halten, und dann Rückführen des ersten Elements dieses Vektors nur.
Setzen eines Flags, wenn ein Wort gefunden wird, und Hinzufügen einer Logikprüfung am Anfang der Funktion, die sofort zurückkehrt, wenn das Flag gesetzt ist.
setjmp, longjmp, exit, break und Ausnahmen können nicht verwendet werden.