<?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[String: Finden und Ausgeben]]></title><description><![CDATA[<p>Hallo ich bastel gerade eine Suchfunktion.<br />
Er soll die Textstelle finden und ausgeben:</p>
<pre><code class="language-cpp">void DatenFinden ()
{
	fstream f;
	string sAuslesen;
	f.open(&quot;./adressbuch.txt&quot;, ios::in);
	getline(f, sAuslesen);   
	f.close();

	string::size_type sGefunden = sAuslesen.find( &quot;Tob&quot;, 0 );
	string sAusgabe = sAuslesen.substr(sGefunden);

	cout &lt;&lt; &quot;Gefunden: &quot;&lt;&lt;sGefunden&lt;&lt;endl;
	cout &lt;&lt; &quot;Ausgabe: &quot;&lt;&lt;sAusgabe&lt;&lt;endl;

}
</code></pre>
<p>Klappt soweit alles gut.<br />
Aber nur wenn sich das gesuchte Wort in der ersten Zeile befindet.<br />
Wenn ich nach irgendeinem Wort suche, was in der zweiten Zeile oder allgemein etwas weiter unten ist (z.b. Telefonnr., Wohnort etc.)kommt irgendwie ein Fehler:</p>
<blockquote>
<p>Unhandled exception at 0x7c812afb in test123.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012fb28..</p>
</blockquote>
<p>Beim Compilieren meckert er nicht. Nur wenn ich die Funktion tatsächlich aufrufe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248985/string-finden-und-ausgeben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 17:38:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248985.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Sep 2009 10:33:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 10:33:21 GMT]]></title><description><![CDATA[<p>Hallo ich bastel gerade eine Suchfunktion.<br />
Er soll die Textstelle finden und ausgeben:</p>
<pre><code class="language-cpp">void DatenFinden ()
{
	fstream f;
	string sAuslesen;
	f.open(&quot;./adressbuch.txt&quot;, ios::in);
	getline(f, sAuslesen);   
	f.close();

	string::size_type sGefunden = sAuslesen.find( &quot;Tob&quot;, 0 );
	string sAusgabe = sAuslesen.substr(sGefunden);

	cout &lt;&lt; &quot;Gefunden: &quot;&lt;&lt;sGefunden&lt;&lt;endl;
	cout &lt;&lt; &quot;Ausgabe: &quot;&lt;&lt;sAusgabe&lt;&lt;endl;

}
</code></pre>
<p>Klappt soweit alles gut.<br />
Aber nur wenn sich das gesuchte Wort in der ersten Zeile befindet.<br />
Wenn ich nach irgendeinem Wort suche, was in der zweiten Zeile oder allgemein etwas weiter unten ist (z.b. Telefonnr., Wohnort etc.)kommt irgendwie ein Fehler:</p>
<blockquote>
<p>Unhandled exception at 0x7c812afb in test123.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0012fb28..</p>
</blockquote>
<p>Beim Compilieren meckert er nicht. Nur wenn ich die Funktion tatsächlich aufrufe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770205</guid><dc:creator><![CDATA[knudy]]></dc:creator><pubDate>Tue, 01 Sep 2009 10:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 10:42:59 GMT]]></title><description><![CDATA[<p>Hehe, naja, du liest ja auch nur die erste Zeile aus, oder was denkst du, was &quot;getline&quot; macht? und std::string::find gibt std::string::npos zurück, wenn nix gefunden wurde, darauf solltest du prüfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770209</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 01 Sep 2009 10:42:59 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 10:48:25 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Hehe, naja, du liest ja auch nur die erste Zeile aus, oder was denkst du, was &quot;getline&quot; macht? und std::string::find gibt std::string::npos zurück, wenn nix gefunden wurde, darauf solltest du prüfen.</p>
</blockquote>
<p>Stimmt.<br />
Also die npos Prüfung habe ich nun eingebaut.<br />
Aber wie mache ich das, dass er am Anfang komplett die ganze Datei einliest?! Mit ner Schleife?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770212</guid><dc:creator><![CDATA[knudy]]></dc:creator><pubDate>Tue, 01 Sep 2009 10:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 10:53:29 GMT]]></title><description><![CDATA[<p>knudy schrieb:</p>
<blockquote>
<p>Aber wie mache ich das, dass er am Anfang komplett die ganze Datei einliest?! Mit ner Schleife?!</p>
</blockquote>
<p>Ja, solange in einer Schleife einlesen, bis du zu <code>eof()</code> kommst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770214</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 01 Sep 2009 10:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 10:56:40 GMT]]></title><description><![CDATA[<p>Bzw solange, wie getline(...) zu true evaluiert =&gt; <code>while ( getline(...) ) { ...}</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770216</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 01 Sep 2009 10:56:40 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 10:58:46 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>knudy schrieb:</p>
<blockquote>
<p>Aber wie mache ich das, dass er am Anfang komplett die ganze Datei einliest?! Mit ner Schleife?!</p>
</blockquote>
<p>Ja, solange in einer Schleife einlesen, bis du zu <code>eof()</code> kommst...</p>
</blockquote>
<p>und was für ne schleifenbedingung knall ich da rein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770217</guid><dc:creator><![CDATA[knudy]]></dc:creator><pubDate>Tue, 01 Sep 2009 10:58:46 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 12:41:17 GMT]]></title><description><![CDATA[<p>knudy schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>knudy schrieb:</p>
<blockquote>
<p>Aber wie mache ich das, dass er am Anfang komplett die ganze Datei einliest?! Mit ner Schleife?!</p>
</blockquote>
<p>Ja, solange in einer Schleife einlesen, bis du zu <code>eof()</code> kommst...</p>
</blockquote>
<p>und was für ne schleifenbedingung knall ich da rein?</p>
</blockquote>
<p>Na die Prüfung, ob eof gesetzt ist:<br />
<a href="http://www.cplusplus.com/reference/iostream/ios/eof/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/eof/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770289</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 01 Sep 2009 12:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 13:03:22 GMT]]></title><description><![CDATA[<p>Hey ich versuche eine .txt Datei einfach zu kopieren:</p>
<pre><code class="language-cpp">CopyFile(&quot;./adressbuch.txt&quot;, &quot;./adressbuch_backup.txt&quot;);
</code></pre>
<p>Fehlermeldung:<br />
Error 1 error C2660: 'CopyFileW' : function does not take 2 arguments</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770310</guid><dc:creator><![CDATA[10_20 Uhr]]></dc:creator><pubDate>Tue, 01 Sep 2009 13:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 13:09:14 GMT]]></title><description><![CDATA[<p>Also eines von beidem hast du NICHT mir Copy&amp;Paste hier ins Forum gebracht. Du rufst dei Funktion CopyFile auf, der Compiler bemängelt allerdings ein CopyFile<strong>W</strong>. Davon abgesehen ist das WinAPI, da wird dir wohl im entsprechenden Forum besser geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770312</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 01 Sep 2009 13:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 13:22:44 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>knudy schrieb:</p>
<blockquote>
<p>Nexus schrieb:</p>
<blockquote>
<p>knudy schrieb:</p>
<blockquote>
<p>Aber wie mache ich das, dass er am Anfang komplett die ganze Datei einliest?! Mit ner Schleife?!</p>
</blockquote>
<p>Ja, solange in einer Schleife einlesen, bis du zu <code>eof()</code> kommst...</p>
</blockquote>
<p>und was für ne schleifenbedingung knall ich da rein?</p>
</blockquote>
<p>Na die Prüfung, ob eof gesetzt ist:<br />
<a href="http://www.cplusplus.com/reference/iostream/ios/eof/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/eof/</a></p>
</blockquote>
<p>Hab ich nun aber es geht immer noch nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Sagt mir zwar keine Fehlermeldung aber er findet auch ncihts, obwohl in der ersten Zeile <strong>Tob</strong>ias steht.</p>
<pre><code class="language-cpp">fstream f;
	string sAuslesen;
	f.open(&quot;./adressbuch.txt&quot;, ios::in);

	while (! f.eof())
		{
			getline(f, sAuslesen);		 
		}

	f.close();

	string::size_type sGefunden = sAuslesen.find( &quot;Tob&quot;, 0 );

	if( sGefunden != string::npos ) 
		cout &lt;&lt; &quot;Gefunden: &quot; &lt;&lt; sGefunden &lt;&lt; endl;
      else 
       cout &lt;&lt; &quot;Nichts gefunden!&quot; &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1770324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770324</guid><dc:creator><![CDATA[knudy]]></dc:creator><pubDate>Tue, 01 Sep 2009 13:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 13:27:19 GMT]]></title><description><![CDATA[<p>knudy schrieb:</p>
<blockquote>
<p>Sagt mir zwar keine Fehlermeldung aber er findet auch ncihts, obwohl in der ersten Zeile <strong>Tob</strong>ias steht.</p>
<pre><code class="language-cpp">fstream f;
	string sAuslesen;
	f.open(&quot;./adressbuch.txt&quot;, ios::in);
	
	while (! f.eof())
		{
			getline(f, sAuslesen);		 
		}

	f.close();

	string::size_type sGefunden = sAuslesen.find( &quot;Tob&quot;, 0 );

	
	if( sGefunden != string::npos ) 
		cout &lt;&lt; &quot;Gefunden: &quot; &lt;&lt; sGefunden &lt;&lt; endl;
      else 
       cout &lt;&lt; &quot;Nichts gefunden!&quot; &lt;&lt; endl;
</code></pre>
</blockquote>
<p>Das ist das Problem. Es steht in der <em>ersten</em> Zeile, nicht in der letzten. Du liest alles Zeilen nacheinander jedesmal in die gleiche stringvariable, überschreibst sie also jedesmal. Das heißt das, was du am Ende analysierst ist die letzte Zeile.</p>
<p>Pack entweder alle Zeilen nacheinander in einen Container oder analysiere jede Zeile innerhalb der Schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770332</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 01 Sep 2009 13:27:19 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 14:15:39 GMT]]></title><description><![CDATA[<p>Danke.<br />
Hat nun geklappt:</p>
<pre><code class="language-cpp">while (! f.eof()) // Schleife weil er Zeile für Zeile einlesen muss. | eof = End of File
		{
			getline(f, sAuslesen);		
			string::size_type sGefunden = sAuslesen.find( sSucheingabe, 0 );

			if( sGefunden != string::npos ) 
			{
				string sAusgabe = sAuslesen.substr(sGefunden);
				cout &lt;&lt; &quot;Gefunden: &quot; &lt;&lt; sGefunden &lt;&lt;&quot; | Ausgabe: &quot;&lt;&lt;sAusgabe&lt;&lt; endl;
			}

		}
</code></pre>
<p>Aber nun möchte ich, dass wenn nichts gefunden wurde auch ein<br />
&quot;Es wurde leider nichts gefunden&quot;<br />
kommt.</p>
<p>also else gehts nicht weil er sonst nach jeder Zeile (bei der er nichts findet) gleich nen else rauskloppt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770366</guid><dc:creator><![CDATA[knudyknud]]></dc:creator><pubDate>Tue, 01 Sep 2009 14:15:39 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 14:20:37 GMT]]></title><description><![CDATA[<p>Mach vor die Schleife eine bool-Variable (initial &quot;false&quot;), setze sie auf &quot;true&quot; wenn der String gefunden wurde und prüfe die Variable hinter der Schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770370</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 01 Sep 2009 14:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 14:34:51 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Mach vor die Schleife eine bool-Variable (initial &quot;false&quot;), setze sie auf &quot;true&quot; wenn der String gefunden wurde und prüfe die Variable hinter der Schleife.</p>
</blockquote>
<p>Wie meinst du das genau?</p>
<p>Und noch ne kleine Frage:<br />
Wenn ich etwas finde, sagt er mir ja an welcher Stelle er es findet und liest die restliche Zeile aus.<br />
Wie mache ich das, dass wenn irgendwo was findet die komplette Zeile ausgibt auch wenn den &quot;linken&quot; Teil der gefundenen Stelle..</p>
<p>Beispiel:<br />
Es wird nach &quot;Pe&quot; gesucht.</p>
<p>Name: Peter Pan</p>
<p>Er findet Pe und gibt Peter Pan aus</p>
<p>Möchte aber das er komplett<br />
Name: Peter Pan ausgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770380</guid><dc:creator><![CDATA[knudyknudman]]></dc:creator><pubDate>Tue, 01 Sep 2009 14:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 14:48:50 GMT]]></title><description><![CDATA[<p>ok mit der ganze zeile auslesen habe ich nun gelöst bekommen.</p>
<p>aber den bool-vorschlag hab ich noch nicht ganz verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770387</guid><dc:creator><![CDATA[knduy]]></dc:creator><pubDate>Tue, 01 Sep 2009 14:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 15:00:16 GMT]]></title><description><![CDATA[<p>Ich glaub er meint das so:</p>
<pre><code class="language-cpp">bool found = false;
while (! f.eof())
{
   getline(f, sAuslesen);       
   string::size_type sGefunden = sAuslesen.find( sSucheingabe, 0 );

   if( sGefunden != string::npos )
   {
       string sAusgabe = sAuslesen.substr(sGefunden);
       cout &lt;&lt; &quot;Gefunden: &quot; &lt;&lt; sGefunden &lt;&lt;&quot; | Ausgabe: &quot;&lt;&lt;sAusgabe&lt;&lt; endl;
       found = true;
   }
}
if ( !found )
   cout &lt;&lt; &quot;Nix gefunden&quot; &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1770393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770393</guid><dc:creator><![CDATA[it0101@loggedoff]]></dc:creator><pubDate>Tue, 01 Sep 2009 15:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 15:31:46 GMT]]></title><description><![CDATA[<p>it0101@loggedoff schrieb:</p>
<blockquote>
<p>Ich glaub er meint das so:</p>
</blockquote>
<p>Glaub ich auch. Und ich weiß auch nicht recht, was daran unklar war..?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770400</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 01 Sep 2009 15:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 15:39:04 GMT]]></title><description><![CDATA[<p>So alles wunderbar geklappt.<br />
DANKE!!!!</p>
<p>Noch ne Frage:</p>
<p>Also die Daten sind wie folgt in der .txt Datei gespeichert</p>
<blockquote>
<p>Name: hans<br />
Wohnort: Hamburg<br />
Alter: 34<br />
Tele: 3435343</p>
<p>Name: paul<br />
Wohnort: muenchen<br />
Alter: 12<br />
Tele: 3434</p>
<p>Name: hans<br />
Wohnort: Kiel<br />
Alter: 55<br />
Tele: 3423445435</p>
</blockquote>
<p>Nun möchte ich gerne - soweit es geht - dass wenn z.b. in der Suche nach &quot;Kie&quot; suche der komplette &quot;Block&quot; angezeigt wird:</p>
<p>Name: hans<br />
Wohnort: <strong>Ki</strong>el<br />
Alter: 55<br />
Tele: 3423445435</p>
<p>Zurzeit zeigt er mir ja die Suchergebnise nur immer die aktuelle ganze Zeile an!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770405</guid><dc:creator><![CDATA[knudy]]></dc:creator><pubDate>Tue, 01 Sep 2009 15:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to String: Finden und Ausgeben on Tue, 01 Sep 2009 16:24:29 GMT]]></title><description><![CDATA[<p>Nimm ne Klasse, überlad den op&gt;&gt; und dann ists nur noch ein find und fertig bist du...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770428</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 01 Sep 2009 16:24:29 GMT</pubDate></item></channel></rss>