Ich lege fest, dass dem Algorithmus zunächst die zu durchsuchenden Texte übergeben werden. Die Texte müssen nicht kopiert werden, sie bleiben im Speicher verfügbar bis die Klasseninstanz abgebaut wird.
Pro Text wird die Funktion einmal gerufen.
Code: Alles auswählen
void addText( char const * id, char const * text );
Code: Alles auswählen
void addPattern( char const * pattern );
Code: Alles auswählen
int seek( char const * filename );
Werden die Suchworte alle mindestens im Text einmal gefunden, wird die Id des Textes in die Datei geschrieben.
Beispiel:
Code: Alles auswählen
Text1
Text4
Der Algorithmus muss entsprechend dieses Interface implementieren:
Code: Alles auswählen
class SearchBase
{
public:
virtual void addText( char const * id, char const * text ) = 0;
virtual void addPattern( char const * pattern ) = 0;
virtual void clearPatterns( void ) = 0;
virtual int seek( char const * filename ) = 0;
virtual ~SearchBase() = 0;
};
Code: Alles auswählen
class SearchXin : public SearchBase
{
public:
void addText( char const * id, char const * text );
{ /* Implementierung */ }
void addPattern( char const * pattern );
{ /* Implementierung */ }
void clearPatterns( void );
{ /* Implementierung */ }
int seek( char const * filename )
{ /* Implementierung */ }
SearchXin()
{ /* Implementierung */ }
~SearchBase()
{ /* Implementierung */ }
};
void main()
{
// Texte werden geladen
SearchXin search;
//Zeitmessung startet
search.addText( "text 1", text1 );
search.addText( "text 2", text2 );
search.addText( "text 3", text3 );
search.addText( "text 4", text4 );
search.addText( "text 5", text5 );
search.addPattern( "Hallo" );
search.addPattern( "Welt" );
search.seek( "xin/test1.txt" );
search.clearPatterns();
search.addPattern( "Hello" );
search.addPattern( "World" );
search.seek( "xin/test2.txt" );
// Zeitmessung endet
//Destruktor läuft
}
Ich benutze keine Vectoren (std::vector) o.ä. weil ich nicht auch noch Templates abverlangen will. Die Aufgabe ist so oder schon deutlich aufwendiger als die Wortzähl-Geschichte. Ich denke, wer std::vector verwenden möchte, kann sich das als Member in seiner Klasse halten. Mit dieser vergleichsweise billigen API können auch Leute das Problem umsetzen, die sich keine Templates ansehen wollen.
In der eigenen Klasse sind beliebige Variablen erlaubt, was immer ihr wollt.
Wenn noch Fragen sind oder Hilfe braucht, kann die Fragen hier stellen.