<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist]]></title><description><![CDATA[<p>Hallo!</p>
<p>Seit einigen Tagen schon versuche ich ein kleines Problem zu lösen, bei dem ihr mir sicher weiterhelfen könnt.</p>
<p>Ich schreibe ein Programm, das ein recht große Anzahl an &quot;Sätzen&quot; generiert. Circa 99% dieser Sätze sind jedoch sinnlose Buchstabensalate, wie &quot;agjaoisfjregkn&quot;. Leerzeichen und Umbrüche kommen nicht vor.</p>
<p>Die Generierung klappt soweit gut. Die Übersicht nicht.</p>
<p>Um etwas Übersicht zu schaffen, möchte ich nun überprüfen, ob im entsprechenden Satz <strong>mindestens</strong> ein deutsches Wort vorhanden ist. Wegen Bedenken bezüglich der Geschwindigkeit habe ich eine Liste mit den 10.000 häufigsten Wörtern unserer Sprache gesucht, die abfallend sortiert ist. Die Datei ist schlicht aufgebaut. Jedes Wort ist in einer einzigen Zeile eingetragen, wenn man soviel muss man die Datei nur noch Zeilen trennen.</p>
<p>Dies tue ich, indem ich die Datei öffne und mittels</p>
<pre><code>getline
</code></pre>
<p>jede Zeile auslese. Dann prüfe ich mittels</p>
<pre><code>string.find()
</code></pre>
<p>, ob das eben ausgelesene Wort als Unterstring im zu prüfenden Satz vorhanden ist.</p>
<p>Müsste doch eigentlich klappen, oder? Pustekuchen! Das Programm scheint nur eine Zeile zu finden, die in jedem Fall &quot;&quot; lautet. Diese ist zudem in jedem String vorhanden. Somit ist jeder Satz, auch &quot;agjaoisfjregkn&quot;, gültiges Deutsch.</p>
<p>Ich bin schon ziemlich am Verzweifeln und bitte um schnelle Hilfe. Ich danke schon mal im Voraus.</p>
<p>Der Code meiner Funktion lautet wie folgt:</p>
<pre><code class="language-cpp">bool checkSolution(string solution) {
    // Prüfen, ob gültiger deutscher Satz
    // Lade TOP1000-Wortliste
    fstream list(WORDFILE);
    if(!list) {
        cout &lt;&lt; &quot;Datei nicht da!&quot; &lt;&lt; endl;
        return false;
    } else {
        // String mit dem zu prüfenden Wort
        string word;
        // Wort gefunden?
        bool found = false;
        // Solange, bis kein Wort gefunden wurde und noch Zeilen vorhanden sind
        while(!list.eof() &amp;&amp; !found) {
            getline(list, word, '\n');
            cout &lt;&lt; word;
            if(solution.find(word) != string::npos) {
                cout &lt;&lt; &quot; (bei &quot; &lt;&lt; solution.find(word) &lt;&lt; &quot;)&quot;;
                found = true;
                cout &lt;&lt; &quot; gefunden!&quot;;
            }
            cout &lt;&lt; endl;
        }
        // Datei wieder schließen
        list.close();
        return found;
    }
}
</code></pre>
<p>Die Liste sieht so aus: (Auszug mit den ersten 100 Wörtern):</p>
<pre><code>der
die
und
in
den
von
zu
das
mit
sich
des
auf
für
ist
im
dem
nicht
ein
Die
eine
als
auch
es
an
werden
aus
er
hat
daß
sie
nach
wird
bei
einer
Der
um
am
sind
noch
wie
einem
über
einen
Das
so
Sie
zum
war
haben
nur
oder
aber
vor
zur
bis
mehr
durch
man
sein
wurde
sei
In
Prozent
hatte
kann
gegen
vom
können
schon
wenn
habe
seine
Mark
ihre
dann
unter
wir
soll
ich
eines
Es
Jahr
zwei
Jahren
diese
dieser
wieder
keine
Uhr
seiner
worden
Und
will
zwischen
Im
immer
Millionen
Ein
was
sagte
</code></pre>
<p>(Auf Anfrage schicke ich gerne die komplette Datei!)</p>
<p>Vielen Dank und Viele Grüße<br />
Dominik</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294862/substrings-aus-datei-prüfen-um-festzustellen-ob-satz-quot-deutsch-quot-ist</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 15:48:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294862.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Nov 2011 17:24:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Wed, 02 Nov 2011 17:24:52 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Seit einigen Tagen schon versuche ich ein kleines Problem zu lösen, bei dem ihr mir sicher weiterhelfen könnt.</p>
<p>Ich schreibe ein Programm, das ein recht große Anzahl an &quot;Sätzen&quot; generiert. Circa 99% dieser Sätze sind jedoch sinnlose Buchstabensalate, wie &quot;agjaoisfjregkn&quot;. Leerzeichen und Umbrüche kommen nicht vor.</p>
<p>Die Generierung klappt soweit gut. Die Übersicht nicht.</p>
<p>Um etwas Übersicht zu schaffen, möchte ich nun überprüfen, ob im entsprechenden Satz <strong>mindestens</strong> ein deutsches Wort vorhanden ist. Wegen Bedenken bezüglich der Geschwindigkeit habe ich eine Liste mit den 10.000 häufigsten Wörtern unserer Sprache gesucht, die abfallend sortiert ist. Die Datei ist schlicht aufgebaut. Jedes Wort ist in einer einzigen Zeile eingetragen, wenn man soviel muss man die Datei nur noch Zeilen trennen.</p>
<p>Dies tue ich, indem ich die Datei öffne und mittels</p>
<pre><code>getline
</code></pre>
<p>jede Zeile auslese. Dann prüfe ich mittels</p>
<pre><code>string.find()
</code></pre>
<p>, ob das eben ausgelesene Wort als Unterstring im zu prüfenden Satz vorhanden ist.</p>
<p>Müsste doch eigentlich klappen, oder? Pustekuchen! Das Programm scheint nur eine Zeile zu finden, die in jedem Fall &quot;&quot; lautet. Diese ist zudem in jedem String vorhanden. Somit ist jeder Satz, auch &quot;agjaoisfjregkn&quot;, gültiges Deutsch.</p>
<p>Ich bin schon ziemlich am Verzweifeln und bitte um schnelle Hilfe. Ich danke schon mal im Voraus.</p>
<p>Der Code meiner Funktion lautet wie folgt:</p>
<pre><code class="language-cpp">bool checkSolution(string solution) {
    // Prüfen, ob gültiger deutscher Satz
    // Lade TOP1000-Wortliste
    fstream list(WORDFILE);
    if(!list) {
        cout &lt;&lt; &quot;Datei nicht da!&quot; &lt;&lt; endl;
        return false;
    } else {
        // String mit dem zu prüfenden Wort
        string word;
        // Wort gefunden?
        bool found = false;
        // Solange, bis kein Wort gefunden wurde und noch Zeilen vorhanden sind
        while(!list.eof() &amp;&amp; !found) {
            getline(list, word, '\n');
            cout &lt;&lt; word;
            if(solution.find(word) != string::npos) {
                cout &lt;&lt; &quot; (bei &quot; &lt;&lt; solution.find(word) &lt;&lt; &quot;)&quot;;
                found = true;
                cout &lt;&lt; &quot; gefunden!&quot;;
            }
            cout &lt;&lt; endl;
        }
        // Datei wieder schließen
        list.close();
        return found;
    }
}
</code></pre>
<p>Die Liste sieht so aus: (Auszug mit den ersten 100 Wörtern):</p>
<pre><code>der
die
und
in
den
von
zu
das
mit
sich
des
auf
für
ist
im
dem
nicht
ein
Die
eine
als
auch
es
an
werden
aus
er
hat
daß
sie
nach
wird
bei
einer
Der
um
am
sind
noch
wie
einem
über
einen
Das
so
Sie
zum
war
haben
nur
oder
aber
vor
zur
bis
mehr
durch
man
sein
wurde
sei
In
Prozent
hatte
kann
gegen
vom
können
schon
wenn
habe
seine
Mark
ihre
dann
unter
wir
soll
ich
eines
Es
Jahr
zwei
Jahren
diese
dieser
wieder
keine
Uhr
seiner
worden
Und
will
zwischen
Im
immer
Millionen
Ein
was
sagte
</code></pre>
<p>(Auf Anfrage schicke ich gerne die komplette Datei!)</p>
<p>Vielen Dank und Viele Grüße<br />
Dominik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139456</guid><dc:creator><![CDATA[dominik_the_fischjunge]]></dc:creator><pubDate>Wed, 02 Nov 2011 17:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Wed, 02 Nov 2011 20:14:49 GMT]]></title><description><![CDATA[<p>Mach mal <code>'\n'</code> bei <code>getline()</code> weg:</p>
<pre><code class="language-cpp">while(!list.eof()) { //warum überprüfst du hier &quot;found&quot;, wenn es nur false sein kann?
            getline(list, word);
            cout &lt;&lt; &quot;\n&quot; &lt;&lt; word;
            size_t wordPos = solution.find(word);
            if(wordPos != string::npos) {
                cout &lt;&lt; &quot; (bei &quot; &lt;&lt; static_cast&lt;int&gt;(wordPos) &lt;&lt; &quot;) gefunden!\n&quot;;
                found = true;
            }
        }
</code></pre>
<p>Edit: Besser wär's die ganze Datei einzulesen (z.B. in std::list) und dann drüber iterieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139482</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Wed, 02 Nov 2011 20:14:49 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Wed, 02 Nov 2011 19:31:22 GMT]]></title><description><![CDATA[<p>Deine wesentliche Änderung, nämlich das Weglassen von '\n', hatte ich in meiner ursprünglichen Version schon benutzt. Der von dir gepostete Code funktionierte genauso wenig wie der meine. Genau das war es ja, was mich so verzweifelt macht. Alles was ich versuche, funktioniert einfach nicht.</p>
<p>Ich prüfe found nur aus dem Grund, damit die Schleife nach dem ersten gefundenen Wort verlassen wird. Schließlich soll das Programm ja nur prüfen, ob min. 1 Wort vorhanden ist, eine weitere Prüfung würde dann nichts mehr bringen.</p>
<p>Trotzdem danke ich für deine Hilfe. Den Typ size_t zu nutzen, daran hatte ich eig. noch nicht gedacht. Worin lägen denn die Vorteile dieser Methode?</p>
<p>Dominik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139509</guid><dc:creator><![CDATA[dominik_the_fischjunge]]></dc:creator><pubDate>Wed, 02 Nov 2011 19:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Wed, 02 Nov 2011 20:13:37 GMT]]></title><description><![CDATA[<p>Sorry, da habe ich mich mit dem found verguckt. Ansonsten funktioniert der Code bei mir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139528</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Wed, 02 Nov 2011 20:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Thu, 03 Nov 2011 08:35:14 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Machs doch mal so</p>
<pre><code class="language-cpp">while(getline(list, word) &amp;&amp; !found)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2139690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139690</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 03 Nov 2011 08:35:14 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Thu, 03 Nov 2011 14:47:05 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe heute herausgefunden, woran es lag, dass es vorher nie klappte. Ich hatte mein Programm immer mit den Debug-Einstellung kompiliert. Heute morgen habe ich es auch mit den Release-Einstellungen versucht - und voila, es funktionierte perfekt. Genau so, wie ich es mir vorgestellt hatte. Ich werde mein Programm jetzt also weitermachen und danke euch für eure tatkräftige Unterstützung.</p>
<p>Sollte jemanden etwas ähnlichen passieren (btw., ich nutze die QT Creator-Umgebung unter Windows XP), dann kann es helfen, auf den Debugger zu verzichten und das Programm direkt mit den Release-Einstellungen auszuführen.</p>
<p>Vielen Dank und angenehmes Coden<br />
Dominik</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139852</guid><dc:creator><![CDATA[dominik_the_fischjunge]]></dc:creator><pubDate>Thu, 03 Nov 2011 14:47:05 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Thu, 03 Nov 2011 14:52:20 GMT]]></title><description><![CDATA[<p>Dann hast aber noch einen Fehler drin. Normalerweise sollte ein Programm in der Debug und in der Releaseeinstellung gleich funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139861</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 03 Nov 2011 14:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Thu, 03 Nov 2011 16:24:25 GMT]]></title><description><![CDATA[<p>dominik_the_fischjunge schrieb:</p>
<blockquote>
<p>Wegen Bedenken bezüglich der Geschwindigkeit habe ich eine Liste mit den 10.000 häufigsten Wörtern unserer Sprache gesucht, die abfallend sortiert ist.</p>
</blockquote>
<p>Wenn du dir Sorgen um Geschwindigkeit machst, solltest du hier noch etwas tiefer in die Trickkiste greifen und nach dem Beuteil mit Tries und verwandten Datenstrukturen suchen. Momentan sind <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Ternary_search_tree" rel="nofollow">ternäre Suchbäume</a> da der letzte Schrei, und in Boost.Spirit gibt es etwas versteckt (hinter der symbols-Klassenvorlage) sogar eine Implementation unter Boost-Lizenz. Allerdings ist Spirit für Anfänger ziemlich überwältigend, also weiß ich nicht, ob du das bei dir sinnvoll eingebaut kriegst. Der Wikipedia-Artikel hat unten zwei Links zu anderen C++-Implementationen; wahrscheinlich sind die einfacher zu benutzen - ich kenne sie nur halt nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139904</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 03 Nov 2011 16:24:25 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Thu, 03 Nov 2011 16:41:19 GMT]]></title><description><![CDATA[<p>Keinen endlichen Automaten oder Präfixbaum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139912</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 03 Nov 2011 16:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to Substrings aus Datei prüfen, um festzustellen, ob Satz &amp;quot;deutsch&amp;quot; ist on Thu, 03 Nov 2011 20:44:39 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Keinen endlichen Automaten oder Präfixbaum?</p>
</blockquote>
<p>Ternäre Suchbäume sind eine Unterart von Präfixbäumen. Ob Präfixbaum oder endlicher Automat dürfte Jacke wie Hose sein; es ist davon auszugehen, dass der Zustandsgraph des Automaten dem Suchbaum am Ende sehr ähnlich sehen dürfte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140030</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Thu, 03 Nov 2011 20:44:39 GMT</pubDate></item></channel></rss>