007
16.09.2004, 07:56 Uhr
virtual
Sexiest Bit alive (Operator)
|
Es kommt auf die genaue Aufgabenstellung an, denke ich. Wenn ein Schlüsselwort wirklich ein Wort ist (und davon bin ich ausgegangen), dann bringt find nicht viel, weil es auch Wortteile findet. Ich hätte Die suche nach Vorommnissen erstmal so gelöst:
C++: |
#include <iostream> #include <sstream> #include <set> #include <fstream> #include <cctype> #include <iterator>
// Ersetzt alles, was nicht alphanumerisch ist in blanks char alnum_only(char c) { return !isalnum(c)? ' ':c; }
int main() { std::string datei = "key.cpp";
// Schlüsselwörter seien mal hier einfach "word" und "key" std::set<std::string> keywords; keywords.insert("word"); keywords.insert("key");
// Einlesen der Datei, so daß in words nur Woörter stehen, nie aber Satzzeichen std::ifstream in(datei.c_str()); std::stringstream words; in.unsetf(std::ios_base::skipws); std::transform(std::istream_iterator<char>(in), std::istream_iterator<char>(), std::ostream_iterator<char>(words), alnum_only);
// Berechne Hitscore int score = 0; while (words) { std::string word; words>>word; if (keywords.find(word)!=keywords.end()) score++; }
std::cout<<score<<" Hits in Datei "<<datei<<std::endl; }
|
Dies kann man dann noch erweitern, zB zählen wie oft welches Keyword gehittet wurde. Bei großen Datenmenge ist dieser Algo allerdings nicht sehr effizient. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |