<?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[ne kleine frage zu nem c++ codeteil (strings)]]></title><description><![CDATA[<p>hallo,<br />
ich hatte jetzt keine lust lange danach zu suchen und vor allem wusste ich nicht wonach ich genau suchen sollte deswegen frage ich euch.</p>
<p>ich hab c gelernt und hab jetzt ein c++ code vor mir an dem ich einen teil nicht verstenden habe</p>
<pre><code class="language-cpp">string eingabe;
        eingabe.reserve(50);
        cout &lt;&lt; endl &lt;&lt; &quot;Your move (e.g. A1): &quot; ;
        eingabe.erase(eingabe.begin(),eingabe.end());
        cin &gt;&gt; eingabe;
        px = ((int) eingabe.at(0) ) - 65;
        py = ((int) eingabe.at(1) ) - 49;
</code></pre>
<p>mein problem liegt dadrin dass ich nicht verstehe was das eingabe.reserve(50) bedeutet und damit verstehe ich alles nicht wo eingabe. steht. also vor allem diese zeilen:</p>
<pre><code class="language-cpp">eingabe.reserve(50);

        eingabe.erase(eingabe.begin(),eingabe.end());

        px = ((int) eingabe.at(0) ) - 65;
        py = ((int) eingabe.at(1) ) - 49;
</code></pre>
<p>danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266815/ne-kleine-frage-zu-nem-c-codeteil-strings</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 19:55:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266815.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 May 2010 21:17:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ne kleine frage zu nem c++ codeteil (strings) on Fri, 14 May 2010 21:17:46 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich hatte jetzt keine lust lange danach zu suchen und vor allem wusste ich nicht wonach ich genau suchen sollte deswegen frage ich euch.</p>
<p>ich hab c gelernt und hab jetzt ein c++ code vor mir an dem ich einen teil nicht verstenden habe</p>
<pre><code class="language-cpp">string eingabe;
        eingabe.reserve(50);
        cout &lt;&lt; endl &lt;&lt; &quot;Your move (e.g. A1): &quot; ;
        eingabe.erase(eingabe.begin(),eingabe.end());
        cin &gt;&gt; eingabe;
        px = ((int) eingabe.at(0) ) - 65;
        py = ((int) eingabe.at(1) ) - 49;
</code></pre>
<p>mein problem liegt dadrin dass ich nicht verstehe was das eingabe.reserve(50) bedeutet und damit verstehe ich alles nicht wo eingabe. steht. also vor allem diese zeilen:</p>
<pre><code class="language-cpp">eingabe.reserve(50);

        eingabe.erase(eingabe.begin(),eingabe.end());

        px = ((int) eingabe.at(0) ) - 65;
        py = ((int) eingabe.at(1) ) - 49;
</code></pre>
<p>danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897324</guid><dc:creator><![CDATA[ciggy]]></dc:creator><pubDate>Fri, 14 May 2010 21:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to ne kleine frage zu nem c++ codeteil (strings) on Fri, 14 May 2010 21:44:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">eingabe.reserve(50);

        eingabe.erase(eingabe.begin(),eingabe.end());
</code></pre>
<p>Der Teil ist unnötig. Zuerst wird sichergestellt, dass Eingabe 50 Zeichen aufnehmen kann, ohne intern kopieren zu müssen. Dann wird alles in eingabe gelöscht. Die ganze Prozedur ist vollkommen sinnfrei, sofern hier nicht irgendwelche geheimnisvollen Nebeneffekte ausgenutzt werden sollen (und davon ist nichts zu erkennen).</p>
<p>Dieser Teil:</p>
<pre><code class="language-cpp">px = ((int) eingabe.at(0) ) - 65;
        py = ((int) eingabe.at(1) ) - 49;
</code></pre>
<p>Hier wird erwartet, dass in eingabe Koordinaten wie bei Schach oder Schiffe versenken stehen, also z.B. A1, H4 oder B8. Dann wird vom ersten Zeichen (also dem Buchstaben) der ASCII Wert von A abgezogen, wodurch man 'A' zu 0 umrechnet und Z zu 25. Ebenso wird vom zweiten Zeichen (also der Zifffer) der ASCII Wert von '0' (dem Zeichen!) abgezogen, wodurch das Zeichen '0' zur Zahl 0 umgerechnet wird, ebenso alle Ziffern bis 9.<br />
Der Cast ist dabei ebenfalls total unnötig, außerdem ist nirgendwo garantiert dass die Plattform ASCII-Zeichencodierung benutzt, ein simples <a href="http://eingabe.at" rel="nofollow">eingabe.at</a>(0)-'A' wäre deutlich besser gewesen.</p>
<p>Das alles hinterlässt den Eindruck, dass der Programmierer dieser Zeilen nicht wirklich viel Ahnung hat. Du solltest in Zukunft Code von dieser Stelle mit Vorsicht genießen und erst Recht nicht zum Lernen benutzen. Zumindest nicht als Vorbild --- Du kannst einiges daraus lernen, warum dieser Code nicht gut ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897332</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 14 May 2010 21:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to ne kleine frage zu nem c++ codeteil (strings) on Fri, 14 May 2010 23:06:44 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Die ganze Prozedur ist vollkommen sinnfrei, sofern hier nicht irgendwelche geheimnisvollen Nebeneffekte ausgenutzt werden sollen ...</p>
</blockquote>
<p>Wahrscheinlich ist</p>
<pre><code class="language-cpp">eingabe.erase(eingabe.begin(), eingabe.end());
</code></pre>
<p>eine 'Dekoration' für</p>
<pre><code class="language-cpp">memset(eingabe.CharDaten, '\0', sizeof(char));
</code></pre>
<p>Das dekorierte 'new' in</p>
<pre><code class="language-cpp">eingabe.reserve(50);
</code></pre>
<p>ist wahrscheinlich eher ein malloc() als ein calloc(). new ist sowieso nie ein calloc (und schon gar kein realloc).<br />
Echt schlimm, was man in C++ alles nicht machen kann ...<br />
Der Erfinder des sinnfreien Codes wollte (aus welchen Gründen auch immer) wohl nur sicher gehen,<br />
dass die 'eiserne' 50-Byte-Reserve(50) ausgenullt wird, bevor damit weiter gearbeitet wird.<br />
Der willkürliche und sinnverwirrende Bezeichnerwildwuchs in C++ kann dem gestandenen C-Programmierer (wie insbesondere den Themen-Starter)<br />
wohl nur suspekt erscheinen.<br />
Alles nur Dekorations-'Objekte' im Troll-Stil (speziell die C++ - std::string Teile), die nichts vereinfachen,<br />
aber dafür umso umständlicher zu handhaben sind, je trivialer die Aufgabenstellung ist ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897358</guid><dc:creator><![CDATA[Strohkopf]]></dc:creator><pubDate>Fri, 14 May 2010 23:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to ne kleine frage zu nem c++ codeteil (strings) on Sat, 15 May 2010 00:17:19 GMT]]></title><description><![CDATA[<p>Aber was ist die Aufgabenstellung? Es macht überhaupt keinen Sinn den reservierten Speicher auf 0 zu setzen, deswegen gibt es ja auch keine eingbaute Funktionalität dafür! Außerdem setzt erase noch nicht einmal den Speicher auf 0, sondern löscht bloß virtuell Zeichen (d.h. die internen Pointer des Strings werden umgesetzt). Was hier total sinnlos ist.</p>
<p>Um wirklich Werte zu verändern müsste man assign benutzen. Und auch dies macht keinen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897369</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 15 May 2010 00:17:19 GMT</pubDate></item><item><title><![CDATA[Reply to ne kleine frage zu nem c++ codeteil (strings) on Sat, 15 May 2010 05:05:15 GMT]]></title><description><![CDATA[<blockquote>
<pre><code>eingabe.reserve(50);
       
        eingabe.erase(eingabe.begin(),eingabe.end());
</code></pre>
<p>Der Teil ist unnötig. Zuerst wird sichergestellt, dass Eingabe 50 Zeichen aufnehmen kann, ohne intern kopieren zu müssen. Dann wird alles in eingabe gelöscht. Die ganze Prozedur ist vollkommen sinnfrei, sofern hier nicht irgendwelche geheimnisvollen Nebeneffekte ausgenutzt werden sollen (und davon ist nichts zu erkennen).</p>
</blockquote>
<p>Ich vermute mal dass jemand Probleme damit hatte, dass im Eingabebuffer noch Reste von vorherigen Eingaben standen. Durch das löschen von dem eingabe string hat er versucht das zu beheben.<br />
Das funktioniert so aber nicht, google mal nach &quot;Eingabebuffer cin leeren&quot; oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897385</guid><dc:creator><![CDATA[kenner der noobs]]></dc:creator><pubDate>Sat, 15 May 2010 05:05:15 GMT</pubDate></item></channel></rss>