006
08.03.2004, 16:41 Uhr
Oliver
S2-Pixelgeneral
|
Alle so erstens ist das Programm von der Syntax schon nicht richtig und zweitens, wo ich es dann verbessert hatte, kam nichts Gescheites dabei heraus.
Ich habe mal selber ein Programm geschrieben, das findet allerdings das Wort nur einmal, aber mit x Zeichen dazwischen:
C++: |
#include <iostream> #include <fstream> #include <string> #include <list>
using namespace std;
// Struktur für jedes gefundene Zeichen struct gefundene_Zeichen { int pos_text; char name; int pos_suchstr; };
int main() { // in text wird der Text gespeichert, in dem das Suchwort gesucht werden soll string text; // hier wirde das gesuchte Wort gespeichert string suchstring; // im foundindex speichern wir, welches Zeichen aus dem "suchstring" wir gerade suchen müssen int foundindex=0; // die Längen von den beiden Strings int text_length; int suchstr_length; // In der foundlist werden die gefundenen Buchstaben gespeichert list<gefundene_Zeichen> foundlist; // Iterator zur foundlist list<gefundene_Zeichen>::iterator it; // hier speichern wir die Struktur, damit wir sie zur Liste hinzufügen können gefundene_Zeichen temp; // erklärt sich von selbst ofstream out;
// Eingaben vom Anwender holen cout << "Bitte geben Sie ein Text ein, in dem das Suchwort gesucht werden soll (bitte ohne Leerzeichen): "; cin >> text; cout << "Geben Sie jetzt das gesuchte Wort ein: "; cin >> suchstring;
// Längen bestimmen text_length=text.length(); suchstr_length=suchstring.length();
// In dieser Schleife werden die Buchstaben gesucht // die Schleife muss abgebrochen werden, wenn die text_length überschritten ist // und wenn der foundindex über oder gleich der Länge des Suchstrings liegt for(int i=0;i<text_length&&foundindex<suchstr_length;++i) { // Das Zeichen wurde gefunden if(text[i]==suchstring[foundindex]) { // wir füllen die Struktur mit den benötigten werden temp.name=suchstring[foundindex]; temp.pos_suchstr=foundindex; temp.pos_text=i; // das temp an die Liste hinzufügen foundlist.push_back(temp); // der foundindex muss erhöht werden, da das // nächste Zeichen gesucht werden muss ++foundindex; } }
out.open("ergebnis.txt"); out << "Suchergebnis: \n\n"; out << "Das Wort \"" << suchstring << "\" wurde im Wort \"" << text << "\" gesucht werden.\n\n";
// wenn die anzahl der gefundenen Zeichen (ermittelt mit foundlist.size()) gleich der Länge des // gesuchten Wortes ist, dann worden die gesamten Zeichen gefunden if(suchstr_length==foundlist.size()) { out<<"Das Wort wurde gefunden und zwar an folgenden Stellen: \n\n\n"; // Nun geben wir alles aus for(it=foundlist.begin();it!=foundlist.end();it++) { out << "Buchstabe: " << it->name << "\n"; out << "Position im Suchwort: " << it->pos_suchstr << "\n"; out << "Position im Text, der durchsucht werden sollte: " << it->pos_text << "\n\n"; } } else { out<<"Das Wort wurde nicht gefunden."; }
out.close();
cin.get(); return 0; }
|
-- Demokratie ist die Diktatur der Mehrheit.
www.siedler25.org/ ( Siedler2 - Remake ) |