ethrandil
2005-10-11, 14:47:02
grml... also.
Ich habe versucht im die aufgabe aus dem thread "alle kombinationen finden" zu lösen. Mit einer wörterliste.
folgende Funktion ist zwar ein bisschen zusammengewurschtelt bei der Fehlersuche, aber sie es klappt einfach immer noch nicht zufriedenstellend.
Es soll eine Wörterliste eingelesen werden - in jeder Zeile steht ein Wort.
Dann soll bei allen Permutationen geprüft werden, ob das Wort in der liste steht und jedes falsche Wort gelöscht werden.
void findeWorte(list < Permutation > *perm, char *dict)
{
cout << "reading file " << dict << "..." << flush;
fstream fd(dict, ios::in);
set < string, ltstr > set;
char buff[100];
if(fd.bad() || fd.fail())
return;
//Dictionary parsen
while(!fd.eof()) {
fd.getline(buff, 100);
set.insert(string(buff));
}
cout << " ... done" << endl;
bool end = false;
list < Permutation >::iterator it = perm->begin();
while(!end) {
//cout << ((Permutation) * it).wort << ":" << (set.count(((Permutation) * it).wort)) << endl;
//Prüfen ob wort in liste
if(set.count(((Permutation) * it).wort) == 0) {
//löschen
perm->erase(it);
it = perm->begin();
if(it == perm->end())
end = true;
}
else {
it++;
if(it == perm->end())
end = true;
}
}
}
Das Problem ist, dass es einfach nicht funktioniert wie es soll.. manchmal sind die Ergebnisse zufriedenstellend - manchmal schaffen es aber auch Wörter durch, die gar nicht in der Liste stehen.
Muss dazu sagen, dass ich noch nicht viel Programmiererfahrung mit c++ hab (eher Java).
Generell hab ich nichtmal ne vernünftige Vorlage dazu wie ich durch eine liste iteriere und zwischendrin auch was rauslöschen kann...
mfg
- Eth
Ich habe versucht im die aufgabe aus dem thread "alle kombinationen finden" zu lösen. Mit einer wörterliste.
folgende Funktion ist zwar ein bisschen zusammengewurschtelt bei der Fehlersuche, aber sie es klappt einfach immer noch nicht zufriedenstellend.
Es soll eine Wörterliste eingelesen werden - in jeder Zeile steht ein Wort.
Dann soll bei allen Permutationen geprüft werden, ob das Wort in der liste steht und jedes falsche Wort gelöscht werden.
void findeWorte(list < Permutation > *perm, char *dict)
{
cout << "reading file " << dict << "..." << flush;
fstream fd(dict, ios::in);
set < string, ltstr > set;
char buff[100];
if(fd.bad() || fd.fail())
return;
//Dictionary parsen
while(!fd.eof()) {
fd.getline(buff, 100);
set.insert(string(buff));
}
cout << " ... done" << endl;
bool end = false;
list < Permutation >::iterator it = perm->begin();
while(!end) {
//cout << ((Permutation) * it).wort << ":" << (set.count(((Permutation) * it).wort)) << endl;
//Prüfen ob wort in liste
if(set.count(((Permutation) * it).wort) == 0) {
//löschen
perm->erase(it);
it = perm->begin();
if(it == perm->end())
end = true;
}
else {
it++;
if(it == perm->end())
end = true;
}
}
}
Das Problem ist, dass es einfach nicht funktioniert wie es soll.. manchmal sind die Ergebnisse zufriedenstellend - manchmal schaffen es aber auch Wörter durch, die gar nicht in der Liste stehen.
Muss dazu sagen, dass ich noch nicht viel Programmiererfahrung mit c++ hab (eher Java).
Generell hab ich nichtmal ne vernünftige Vorlage dazu wie ich durch eine liste iteriere und zwischendrin auch was rauslöschen kann...
mfg
- Eth