<?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[Inkrementer auf eine Funktion?]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich arbeite das Buch &quot;Die C++ Programmiersprache&quot; von dem Erfinder von C++ durch und verstehe folgendes Code-Beispiel nicht.</p>
<p>Hoffe das jemand mir das erklären kann.</p>
<pre><code class="language-cpp">struct Paar
{
   string name;
   double wert;
}

vector&lt;Paar&gt; paare;

// Verwaltet eine Menge von Paar:
// suchenach s, liefere den Wert, falls gefunden;
// anderfalls erzeuge ein neues Paar, und liefere den Standardwert 0
double&amp; werte(const string &amp;s)
{
   for (int i = 0; i &lt; paare.size(); i++)
      if (s == paare[i].name)
         return paare[i].wert;

   Paar p = { s, 0 };
   paare.push_back(p);   //Hänge Paar am Ende an

   return paare[paare.size() -1].wert;
}

int main() // Zählt, wie oft jede Wort in der Eingabe vorkommt
{
   string buf;

   while (cin &gt;&gt; buf)
      werte(buf)++;

   for (vector&lt;Paar&gt;::const_iterator p = paare.begin(); p != paare.end(); ++p)
      cout &lt;&lt; p-&gt;name &lt;&lt; &quot;: &quot; &lt;&lt; p-&gt;wert &lt;&lt; '\n';
}
</code></pre>
<p>Bei folgender Eingabe: aa bb bb aa aa bb aa aa</p>
<p>gibt es folgende Ausgabe:</p>
<p>aa: 5<br />
bb: 3</p>
<p>Die Funktion werte() verstehe ich komplett, die while-Schleife in der main-Funktion verstehe ich nicht.</p>
<p>- Ich sehe kein Ende der Schleife. Wann bzw. wodurch wird die Schleife beended?<br />
- Die Funktion werte() wird in der Schleife aufgerufen, es wird beim Aufruf etwas um eins erhöht. Welcher Wert ist das, wieso und kann ich steuern welcher Wert erhöht werden soll?<br />
- Irgendwo wird ja gezählt wie oft der Wert eingegeben wurde, aber ich sehe keine direkte erhöhung von &quot;wert&quot;. Die Zuweisung an &quot;wert&quot; kann ich auch nicht erkennen.</p>
<p>Hoffe und Bitte darum das mir das jemand erklären kann und will.</p>
<p>Gruß</p>
<p>Rudi G</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230541/inkrementer-auf-eine-funktion</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 07:59:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230541.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Dec 2008 16:02:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Inkrementer auf eine Funktion? on Sun, 28 Dec 2008 16:02:38 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich arbeite das Buch &quot;Die C++ Programmiersprache&quot; von dem Erfinder von C++ durch und verstehe folgendes Code-Beispiel nicht.</p>
<p>Hoffe das jemand mir das erklären kann.</p>
<pre><code class="language-cpp">struct Paar
{
   string name;
   double wert;
}

vector&lt;Paar&gt; paare;

// Verwaltet eine Menge von Paar:
// suchenach s, liefere den Wert, falls gefunden;
// anderfalls erzeuge ein neues Paar, und liefere den Standardwert 0
double&amp; werte(const string &amp;s)
{
   for (int i = 0; i &lt; paare.size(); i++)
      if (s == paare[i].name)
         return paare[i].wert;

   Paar p = { s, 0 };
   paare.push_back(p);   //Hänge Paar am Ende an

   return paare[paare.size() -1].wert;
}

int main() // Zählt, wie oft jede Wort in der Eingabe vorkommt
{
   string buf;

   while (cin &gt;&gt; buf)
      werte(buf)++;

   for (vector&lt;Paar&gt;::const_iterator p = paare.begin(); p != paare.end(); ++p)
      cout &lt;&lt; p-&gt;name &lt;&lt; &quot;: &quot; &lt;&lt; p-&gt;wert &lt;&lt; '\n';
}
</code></pre>
<p>Bei folgender Eingabe: aa bb bb aa aa bb aa aa</p>
<p>gibt es folgende Ausgabe:</p>
<p>aa: 5<br />
bb: 3</p>
<p>Die Funktion werte() verstehe ich komplett, die while-Schleife in der main-Funktion verstehe ich nicht.</p>
<p>- Ich sehe kein Ende der Schleife. Wann bzw. wodurch wird die Schleife beended?<br />
- Die Funktion werte() wird in der Schleife aufgerufen, es wird beim Aufruf etwas um eins erhöht. Welcher Wert ist das, wieso und kann ich steuern welcher Wert erhöht werden soll?<br />
- Irgendwo wird ja gezählt wie oft der Wert eingegeben wurde, aber ich sehe keine direkte erhöhung von &quot;wert&quot;. Die Zuweisung an &quot;wert&quot; kann ich auch nicht erkennen.</p>
<p>Hoffe und Bitte darum das mir das jemand erklären kann und will.</p>
<p>Gruß</p>
<p>Rudi G</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636537</guid><dc:creator><![CDATA[Rudi G]]></dc:creator><pubDate>Sun, 28 Dec 2008 16:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to Inkrementer auf eine Funktion? on Sun, 28 Dec 2008 16:19:07 GMT]]></title><description><![CDATA[<p>Ganz einfach:</p>
<pre><code class="language-cpp">return paare[paare.size() -1].wert;
</code></pre>
<p>Ist der Rückgabewert deiner Funktion, und dieser wird einfach hier:</p>
<pre><code class="language-cpp">werte(buf)++;
</code></pre>
<p>erhöht um eins.<br />
Und naklar ist die while Schleife irgendwann zuende, die Abbruchbedingung steht doch in der while:</p>
<pre><code class="language-cpp">while (cin &gt;&gt; buf)
</code></pre>
<p>Heißt soviel wie &quot;Solange eine gültige String-Eingabe kommt, mache weiter&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636543</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Sun, 28 Dec 2008 16:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Inkrementer auf eine Funktion? on Sun, 28 Dec 2008 16:20:07 GMT]]></title><description><![CDATA[<p>Rudi G schrieb:</p>
<blockquote>
<p>- Ich sehe kein Ende der Schleife. Wann bzw. wodurch wird die Schleife beended?</p>
</blockquote>
<p>Die Schleife liest immer ein Wort in die Variable <code>buf</code> ein. Leerzeichen werden automatisch ignoriert. Es werden so lange Wörter eingelesen, bis ein Fehler auftritt. Dies kann zum Beispiel der Fall sein, wenn das Ende des Streams erreicht wird, also alle Zeichen eingelesen wurden, welche im Stream waren.<br />
Ein Stream, was <code>std::cin</code> ist, kann man direkt auf Gültigkeit abrufen. Also das Objekt lässt sich implizit zu einem boolschen Wert konvertieren, bzw. meistens wird dazu ein void-Zeiger genommen, welcher 0 oder ungleich 0 ist.<br />
<a href="http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operator_voidpt.html</a></p>
<p>Rudi G schrieb:</p>
<blockquote>
<p>- Die Funktion werte() wird in der Schleife aufgerufen, es wird beim Aufruf etwas um eins erhöht. Welcher Wert ist das, wieso und kann ich steuern welcher Wert erhöht werden soll?<br />
- Irgendwo wird ja gezählt wie oft der Wert eingegeben wurde, aber ich sehe keine direkte erhöhung von &quot;wert&quot;. Die Zuweisung an &quot;wert&quot; kann ich auch nicht erkennen.</p>
</blockquote>
<p>Die Funktion <code>werte</code> gibt eine Referenz zur Variable <code>wert</code> zurück, welche dann inkrementiert wird. Ganz einfach ...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636544</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 28 Dec 2008 16:20:07 GMT</pubDate></item><item><title><![CDATA[Reply to Inkrementer auf eine Funktion? on Sun, 28 Dec 2008 16:37:29 GMT]]></title><description><![CDATA[<p>1. <a href="http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/operator&gt;&gt;.html</a></p>
<p>Siehe Abschnitt 'Return Value': &quot;The object itself (*this).&quot;</p>
<p>while wertet den bool-operator des zurückgegebenen Objekts aus.<br />
Wenn die Eingabe erfolgreich war wird true zurückgegeben, wenn nicht false.</p>
<p>2. &amp; 3. Wie du an double**&amp;** werte(const string &amp;s) erkennen kannst wird eine Referenz zurückgegeben.</p>
<p>Refernzen funktionieren ein bisschen wie Zeiger.<br />
Sie 'zeigen' auf eine Variable. Wenn du also einen operator (z.B. ++) auf eine Referenz ausführst wird dieser in Wirklichkeit auf die Variable ausgeführt auf die diese Referenz 'zeigt'.</p>
<p>Vielleicht wird es so klarer:</p>
<p>werte(buf)++;</p>
<p>entspricht:</p>
<p>paare[i].wert++;<br />
bzw.<br />
paare[paare.size() -1].wert++;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636551</guid><dc:creator><![CDATA[rean]]></dc:creator><pubDate>Sun, 28 Dec 2008 16:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Inkrementer auf eine Funktion? on Mon, 29 Dec 2008 01:06:04 GMT]]></title><description><![CDATA[<p>Hey Leute,</p>
<p>vielen vielen Dank ihr seit echt Klasse.</p>
<pre><code class="language-cpp">string antwort()
{
   return &quot;Dankeschön&quot;;
}
</code></pre>
<p>Mir hätte jede der Antworten schon gereicht um das zu verstehen aber öfters hält (hoffentlich) besser <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Wünsche alle einen guten Rutsch ins (hoffentlich) erfolgreiches Jahr 2009</p>
<p>Gruß</p>
<p>Rudi G</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1636699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1636699</guid><dc:creator><![CDATA[Rudi G]]></dc:creator><pubDate>Mon, 29 Dec 2008 01:06:04 GMT</pubDate></item></channel></rss>