<?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[Text&#x2F;Datenverarbeitung (Suchwort finden)]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe eine Aufgabe bekommen aus einer Textdatei ein Suchwort zu suchen und den Zähler damit zu erhöhen.<br />
Randbedingung:<br />
- zeilenweise einlesen<br />
- nur das Suchwort suchen</p>
<p>Beispiel:<br />
Suchwort: Mueller<br />
Jedoch soll er nicht zählen wenn da steht Muellermilch!!!!</p>
<p>Nun habe ich das Programm geschrieben, aber es läuft nicht.<br />
Denke das an der If Anweisung was flasch ist.<br />
Vielleicht könnt ihr mir weiterhelfen.</p>
<pre><code class="language-cpp">#include&lt;string&gt;
#include&lt;iostream&gt;
#include&lt;fstream&gt;

using namespace std;

int main()
{

string dateiname;
fstream muellermilch_datei;
string line;
int counter=0 ;
string key;

cout&lt;&lt;&quot;Bitte Dateiname eingegeben&quot;&lt;&lt;endl;
cin&gt;&gt;dateiname;
cout&lt;&lt; &quot;Key eingeben&quot;&lt;&lt; endl;
cin&gt;&gt; key;

muellermich_datei.open(dateiname.c_str());

if(!muellermilch_datei)
	{
		cerr&lt;&lt;&quot;Kann nicht geöffnet werden&quot;&lt;&lt;endl;
		exit (-1);
	}
string::size_type pos=0;

while(getline(muellermilch_datei, line))
{

while(1)
{
pos=line.find(key,pos);

if(pos!=string::npos)
{									if(pos+key.size()+1==' '||pos+key.size()+1==','||pos+key.size()+1='\n')
	{	counter++;
		pos=pos+key.size();
	}	
else
{
break;
}

else
{
break;
}
}

cout &lt;&lt;&quot;es wurden &quot;&lt;&lt; counter&lt;&lt; &quot;übereinstimmungen gefunden&quot;&lt;&lt; endl;

muellermilch_datei.close();
}
</code></pre>
<p>Kann es sein das ich ein Fehler in der Schleife habe?<br />
Ich will ja nur testen ob das Wort alleine steht, oder vor einen ,/ . sowie am ende einer zeile.</p>
<pre><code class="language-cpp">while(1)
{
pos=line.find(key,pos);

if(pos!=string::npos)
{									if(pos+key.size()+1==' '||pos+key.size()+1==','||pos+key.size()+1='\n')
	{	counter++;
		pos=pos+key.size();
	}
</code></pre>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308429/text-datenverarbeitung-suchwort-finden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 21:11:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308429.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Sep 2012 20:11:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Mon, 24 Sep 2012 20:11:42 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe eine Aufgabe bekommen aus einer Textdatei ein Suchwort zu suchen und den Zähler damit zu erhöhen.<br />
Randbedingung:<br />
- zeilenweise einlesen<br />
- nur das Suchwort suchen</p>
<p>Beispiel:<br />
Suchwort: Mueller<br />
Jedoch soll er nicht zählen wenn da steht Muellermilch!!!!</p>
<p>Nun habe ich das Programm geschrieben, aber es läuft nicht.<br />
Denke das an der If Anweisung was flasch ist.<br />
Vielleicht könnt ihr mir weiterhelfen.</p>
<pre><code class="language-cpp">#include&lt;string&gt;
#include&lt;iostream&gt;
#include&lt;fstream&gt;

using namespace std;

int main()
{

string dateiname;
fstream muellermilch_datei;
string line;
int counter=0 ;
string key;

cout&lt;&lt;&quot;Bitte Dateiname eingegeben&quot;&lt;&lt;endl;
cin&gt;&gt;dateiname;
cout&lt;&lt; &quot;Key eingeben&quot;&lt;&lt; endl;
cin&gt;&gt; key;

muellermich_datei.open(dateiname.c_str());

if(!muellermilch_datei)
	{
		cerr&lt;&lt;&quot;Kann nicht geöffnet werden&quot;&lt;&lt;endl;
		exit (-1);
	}
string::size_type pos=0;

while(getline(muellermilch_datei, line))
{

while(1)
{
pos=line.find(key,pos);

if(pos!=string::npos)
{									if(pos+key.size()+1==' '||pos+key.size()+1==','||pos+key.size()+1='\n')
	{	counter++;
		pos=pos+key.size();
	}	
else
{
break;
}

else
{
break;
}
}

cout &lt;&lt;&quot;es wurden &quot;&lt;&lt; counter&lt;&lt; &quot;übereinstimmungen gefunden&quot;&lt;&lt; endl;

muellermilch_datei.close();
}
</code></pre>
<p>Kann es sein das ich ein Fehler in der Schleife habe?<br />
Ich will ja nur testen ob das Wort alleine steht, oder vor einen ,/ . sowie am ende einer zeile.</p>
<pre><code class="language-cpp">while(1)
{
pos=line.find(key,pos);

if(pos!=string::npos)
{									if(pos+key.size()+1==' '||pos+key.size()+1==','||pos+key.size()+1='\n')
	{	counter++;
		pos=pos+key.size();
	}
</code></pre>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254080</guid><dc:creator><![CDATA[Rob c++]]></dc:creator><pubDate>Mon, 24 Sep 2012 20:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Mon, 24 Sep 2012 21:17:04 GMT]]></title><description><![CDATA[<p>Das hier</p>
<p><code>if(pos+key.size()+1==' '||pos+key.size()+1==','||pos+key.size()+1='\n')</code></p>
<p>sollte vielleicht</p>
<p><code>if(line[pos+key.size()+1]==' '||line[pos+key.size()+1]==','||line[pos+key.size()+1]='\n')</code></p>
<p>so aussehen?</p>
<p>Abgesehen davon vorher noch pruefen, ob du auf dieses Element ueberhaupt zugreifen kannst ( <code>if (pos+key.size()+1 &lt; line.size() .....</code> )</p>
<p>Schleife ist zwar unnoetig kompliziert aufgebaut, aber sollte so funktionieren denk ich.</p>
<p>Ich persoenlich wuerde es aber anders machen. Ich wuerde einfach pruefen ob nach dem Schluesselwort ein Buchstabe folgt und wenn nein den Zaehler dann hochzaehlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254096</guid><dc:creator><![CDATA[Ferris]]></dc:creator><pubDate>Mon, 24 Sep 2012 21:17:04 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Mon, 24 Sep 2012 21:28:19 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;cctype&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;stdexcept&gt;

unsigned long long count_occurrences( std::string const &amp; filename, std::string const &amp; word )
{
	std::ifstream file( filename );

	if( !file.good() ) {

		throw std::runtime_error( &quot;File could not be opened!\n&quot; );
	}

	std::string line;
	unsigned long long counter = 0;

	while( std::getline( file, line ) ) {

		for( std::string::size_type pos = line.find( word ); pos != std::string::npos; pos = line.find( word, pos + word.length() ) ) {

			if( !( pos &amp;&amp; std::isalpha( line[ pos - 1 ] ) ) &amp;&amp; !( ( pos + word.length() &lt; line.length() ) &amp;&amp; std::isalpha( line[ pos + word.length() ] ) ) ) {

				counter++;
			}
		}
	};

	return counter;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2254100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254100</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Mon, 24 Sep 2012 21:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 07:48:28 GMT]]></title><description><![CDATA[<p>Wie wärs damit:</p>
<pre><code class="language-cpp">std::size_t count_word(std::istream &amp; reader, std::string const &amp; word)
{
    std::string line;
    std::size_t count(0);
    while(std::getline(reader, line))
    {
        //da wir zeilenweise einlesen sollen, der Umweg übet getline und stringstream
        //eigentlich kann man da aber drauf verzichten
        std::istringstream isstr(line);
        std::string token;
        isstr &gt;&gt; token;
        if(word.find(word) != std::string::npos)
        {
            ++count;
        }
    }
    return count;
}
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254175</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 25 Sep 2012 07:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 10:10:06 GMT]]></title><description><![CDATA[<p>Rob c++ schrieb:</p>
<blockquote>
<p>habe eine Aufgabe bekommen aus einer Textdatei ein Suchwort zu suchen und den Zähler damit zu erhöhen.<br />
Randbedingung:<br />
- zeilenweise einlesen</p>
</blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">//da wir zeilenweise einlesen sollen, der Umweg übet getline und stringstream
        //eigentlich kann man da aber drauf verzichten
</code></pre>
</blockquote>
<p>genau - kann mir irgendjemand sagen, warum man gerade Anfänger ständig mit 'Zeilenweise einlesen' belastet. Das führt doch bloß über getline zum String-Gefrickele <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> . Ohne dieses 'Zeilenweise einlesen' ist die Aufgabe leicht lösen:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt; // count
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;iterator&gt; // istream_iterator

int main()
{
    using namespace std;
    string suchwort = &quot;Mueller&quot;;
    string dateiname = &quot;Input.txt&quot;;
    ifstream datei( dateiname.c_str() );
    if( !datei.is_open() )
    {
        cerr &lt;&lt; &quot;Konnte Datei '&quot; &lt;&lt; dateiname &lt;&lt; &quot;' nicht oeffnen&quot; &lt;&lt; endl;
        return -2;
    }
    int counter = 0;
    for( string wort; datei &gt;&gt; wort; )
    {
        if( wort == suchwort ) 
            ++counter;
    }
    cout &lt;&lt; &quot;Das Wort '&quot; &lt;&lt; suchwort &lt;&lt; &quot;' kam &quot; &lt;&lt; counter &lt;&lt; &quot;mal vor.&quot; &lt;&lt; endl;
}
</code></pre>
<p>oder etwas eleganter - ab Zeile 18:</p>
<pre><code class="language-cpp">cout &lt;&lt; &quot;Das Wort '&quot; &lt;&lt; suchwort &lt;&lt; &quot;' kam &quot; 
        &lt;&lt; count( istream_iterator&lt; string &gt;( datei ), istream_iterator&lt; string &gt;(), suchwort ) &lt;&lt; &quot;mal vor.&quot; &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2254215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254215</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 25 Sep 2012 10:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 10:20:23 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das funktioniert aber nicht, wenn das Token z.B. ein Punkt enthält. Daher das &quot;String-Gefrickel&quot; über string::find. Man kann zwar auch den Skip-Parser im Stream anpassen, aber das find ich nun doch arg komplizert für einen Anfänger. Außerdem ist das auch deutlich mehr Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254219</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 25 Sep 2012 10:20:23 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 10:44:19 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Werner_logoff schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das funktioniert aber nicht, wenn das Token z.B. ein Punkt enthält. Daher das &quot;String-Gefrickel&quot; über string::find.</p>
</blockquote>
<p>Rob c++ schrieb:</p>
<blockquote>
<p>Suchwort: Mueller<br />
Jedoch soll er nicht zählen wenn da steht Muellermilch!!!!</p>
</blockquote>
<p>und?</p>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Man kann zwar auch den Skip-Parser im Stream anpassen, aber das find ich nun doch arg komplizert für einen Anfänger. Außerdem ist das auch deutlich mehr Code.</p>
</blockquote>
<p>Das mit den Strings ist mehr Code - aber was ist daran positiv?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254225</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 25 Sep 2012 10:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 10:48:22 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Werner_logoff schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das funktioniert aber nicht, wenn das Token z.B. ein Punkt enthält. Daher das &quot;String-Gefrickel&quot; über string::find.</p>
</blockquote>
<p>Rob c++ schrieb:</p>
<blockquote>
<p>Suchwort: Mueller<br />
Jedoch soll er nicht zählen wenn da steht Muellermilch!!!!</p>
</blockquote>
<p>und?</p>
</blockquote>
<p>Du würdest Das Mueller in &quot;Und das war Frau Mueller.&quot; nicht mitzählen. Das soll aber mitgezählt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254227</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 25 Sep 2012 10:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 11:07:36 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Du würdest Das Mueller in &quot;Und das war Frau Mueller.&quot; nicht mitzählen. Das soll aber mitgezählt werden.</p>
</blockquote>
<p>Ich meinte die 'Muellermilch'.</p>
<p>Rob c++ schrieb:</p>
<blockquote>
<p>Suchwort: Mueller<br />
Jedoch soll er nicht zählen wenn da steht Muellermilch!!!!</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2254235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254235</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 25 Sep 2012 11:07:36 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 11:20:54 GMT]]></title><description><![CDATA[<p>Ist das dann nicht ein Feld von Line? Muss ich das nicht vorher definieren?</p>
<p>Ferris schrieb:</p>
<blockquote>
<p><code>if(line[pos+key.size()+1]==' '||line[pos+key.size()+1]==','||line[pos+key.size()+1]='\n')</code></p>
</blockquote>
<p>Was meinst du mit prüfen ?</p>
<blockquote>
<p>Abgesehen davon vorher noch pruefen, ob du auf dieses Element ueberhaupt zugreifen kannst ( <code>if (pos+key.size()+1 &lt; line.size() .....</code> )</p>
</blockquote>
<p>Wie überprüfe ich den ob nach der Länge des Suchwortes ein Buchstabe ist? es könnte ja ein klein bzw ein Großbuchstabe sein!</p>
<blockquote>
<p>Ich persoenlich wuerde es aber anders machen. Ich wuerde einfach pruefen ob nach dem Schluesselwort ein Buchstabe folgt und wenn nein den Zaehler dann hochzaehlen.</p>
</blockquote>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2254238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254238</guid><dc:creator><![CDATA[rob c++]]></dc:creator><pubDate>Tue, 25 Sep 2012 11:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to Text&#x2F;Datenverarbeitung (Suchwort finden) on Tue, 25 Sep 2012 11:26:18 GMT]]></title><description><![CDATA[<p>Achja ist die while(1) schleife eig unnötig?</p>
<pre><code class="language-cpp">while(1)
{
pos=line.find(key,pos);
</code></pre>
<p>könnte mann auch einfach sofort anfangen also:</p>
<pre><code class="language-cpp">while (getline(muellermilch_datei, line))
{
pos=line.find(key,pos);

if (pos== string::npos)
{
break;
}
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2254241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2254241</guid><dc:creator><![CDATA[rob c++]]></dc:creator><pubDate>Tue, 25 Sep 2012 11:26:18 GMT</pubDate></item></channel></rss>