<?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[Rechenprogramm mit strings]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich will ein Rechenprogramm schreiben, bei dem die Rechnung (beliebig lang) als string eingelesen wird. Also so:<br />
cout &lt;&lt; &quot;Geben Sie die Rechnung ein: &quot;;<br />
string rechnung;<br />
getline(cin, rechnung);</p>
<p>Meine Idee ist, dann durch .find zuerst &quot;/&quot; zu suchen. Von dieser Position aus soll dann einmal nach vorne und einmal nach hinten das nächste Rechenzeichen gesucht werden (mit.find_first_of und .find_last_of), damit ich dann die beiden Teile des Strings, wo die Operanden stehen, in einen double umwandeln kann und die Rechnung ausführen kann.<br />
Nahc der Rechnung wird der Teil, der gerade ebrechnet wird gelösch und durch das Ergebnis ersetzt.<br />
Das ganze kommt dann noch mit mal und am Ende mit plus und minus (wegen Punkt vor Strich)</p>
<p>Die Ausgabe sollte dann z.B. so aussehen:</p>
<p>Geben Sie die Rechnung ein: 5+6/3-4+2<br />
5+6/3-4+2=<br />
5+2-4+2=<br />
5</p>
<p>Mein Problem bei dem ganzen ist, dass ich immer noch nciht so mit Zeigern usw. umgehen kann, obwohl ich mir schon bestimmt hundertmal was dazu durchgelesen habe. Das Prinzip verstehe ich schon, nur weiß ich nicht, wie ich es z.B. hier anwenden kann.</p>
<p>Mal so nebenbei, ist es überhaupt möglcih so an die Aufgabe dranzugehen?</p>
<p>Bisher habe ich soetwas z.B.</p>
<p>void Berechnung::division() {<br />
int pos, pos1, pos2;<br />
pos = rechnung.find(&quot;/&quot;); //Position Rechenzeichen<br />
pos1 = rechnung.find_last_of(&quot;/<em>+-&quot;, pos); //Startposition des 1. Operanden<br />
pos2 = rechnung.find_first_of(&quot;/</em>+-&quot;, pos); //Endposition des 2. Operande<br />
}</p>
<p>int pos, pos1 usw. ist ja wahrscheinlich falsch oder, denn es handelt sihc hier ja um einen string?</p>
<p>Wäre net wenn mir jemand etwas helfen könnte <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/305777/rechenprogramm-mit-strings</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 13:29:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305777.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Jul 2012 15:25:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 15:25:02 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich will ein Rechenprogramm schreiben, bei dem die Rechnung (beliebig lang) als string eingelesen wird. Also so:<br />
cout &lt;&lt; &quot;Geben Sie die Rechnung ein: &quot;;<br />
string rechnung;<br />
getline(cin, rechnung);</p>
<p>Meine Idee ist, dann durch .find zuerst &quot;/&quot; zu suchen. Von dieser Position aus soll dann einmal nach vorne und einmal nach hinten das nächste Rechenzeichen gesucht werden (mit.find_first_of und .find_last_of), damit ich dann die beiden Teile des Strings, wo die Operanden stehen, in einen double umwandeln kann und die Rechnung ausführen kann.<br />
Nahc der Rechnung wird der Teil, der gerade ebrechnet wird gelösch und durch das Ergebnis ersetzt.<br />
Das ganze kommt dann noch mit mal und am Ende mit plus und minus (wegen Punkt vor Strich)</p>
<p>Die Ausgabe sollte dann z.B. so aussehen:</p>
<p>Geben Sie die Rechnung ein: 5+6/3-4+2<br />
5+6/3-4+2=<br />
5+2-4+2=<br />
5</p>
<p>Mein Problem bei dem ganzen ist, dass ich immer noch nciht so mit Zeigern usw. umgehen kann, obwohl ich mir schon bestimmt hundertmal was dazu durchgelesen habe. Das Prinzip verstehe ich schon, nur weiß ich nicht, wie ich es z.B. hier anwenden kann.</p>
<p>Mal so nebenbei, ist es überhaupt möglcih so an die Aufgabe dranzugehen?</p>
<p>Bisher habe ich soetwas z.B.</p>
<p>void Berechnung::division() {<br />
int pos, pos1, pos2;<br />
pos = rechnung.find(&quot;/&quot;); //Position Rechenzeichen<br />
pos1 = rechnung.find_last_of(&quot;/<em>+-&quot;, pos); //Startposition des 1. Operanden<br />
pos2 = rechnung.find_first_of(&quot;/</em>+-&quot;, pos); //Endposition des 2. Operande<br />
}</p>
<p>int pos, pos1 usw. ist ja wahrscheinlich falsch oder, denn es handelt sihc hier ja um einen string?</p>
<p>Wäre net wenn mir jemand etwas helfen könnte <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/2231027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231027</guid><dc:creator><![CDATA[astir]]></dc:creator><pubDate>Sun, 08 Jul 2012 15:25:02 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 15:34:56 GMT]]></title><description><![CDATA[<p>Sowas macht man mit Lexern und Parsern. Lernst du in Compilerbau, wenn du mal studierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231029</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 15:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 15:43:39 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Sowas macht man mit Lexern und Parsern. Lernst du in Compilerbau, wenn du mal studierst.</p>
</blockquote>
<p>Auch wenn du grundsätzlich Recht hast, finde ich, dass du etwas übertreibst. Um simple mathematische Ausdrücke auszuwerten reicht ein Parser bereits aus, z.B. ein Recursive Descent Parser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231031</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 08 Jul 2012 15:43:39 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 15:56:03 GMT]]></title><description><![CDATA[<p>Wieso, habe ich was anderes geschrieben? Ich habe ja nicht geschrieben, dass man einen Parsergenerator braucht, wenn du darauf hinaus wolltest. Könnte man nehmen, aber ich hätts wahrscheinlich auch einfach als Recursive Descent Parser geschrieben. Einen Lexer braucht man da aber trotzdem, wär zumindest nicht verkehrt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231034</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 15:56:03 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 15:57:24 GMT]]></title><description><![CDATA[<p>Ja aber es muss doch auch so gehen?</p>
<p>Oder soll ich die Operanden und Rechenzeichen einzeln abfragen lassen und in eine Liste schieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231036</guid><dc:creator><![CDATA[astir]]></dc:creator><pubDate>Sun, 08 Jul 2012 15:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 16:27:36 GMT]]></title><description><![CDATA[<p>astir schrieb:</p>
<blockquote>
<p>Ja aber es muss doch auch so gehen?</p>
<p>Oder soll ich die Operanden und Rechenzeichen einzeln abfragen lassen und in eine Liste schieben?</p>
</blockquote>
<p>Jein. Das könnte schon gehen. Aber das ist alles andere als sauber oder schön. Was machst du mit verschachtelten Klammern? Da dürfte deine Methode ziemlich schnell scheitern. Ich würde es erst gar nicht damit probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231045</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 16:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 17:03:06 GMT]]></title><description><![CDATA[<p>Vermutlich wirst Du strings in ints und umgekehrt umwandeln müssen,</p>
<p>Das geht mit den stringstreams ganz gut, z.B. von string in double umwandeln:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
double d;
string s = &quot;3345.5&quot;;

stringstream sstr;
sstr &lt;&lt; s;
sstr &gt;&gt; d;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2231048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231048</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 08 Jul 2012 17:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 17:00:46 GMT]]></title><description><![CDATA[<p>redrew99 schrieb:</p>
<blockquote>
<p>Vermutlich wirst Du strings in ints und umgekehrt umwandeln müssen,</p>
<p>Das geht mit den stringstreams ganz gut, z.B. von string in double umwandeln:</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
double d;
string s = &quot;3345.5&quot;;

stringstream sstr;
sstr &lt;&lt; s;
sstr &gt;&gt; d;
}
</code></pre>
</blockquote>
<p>Wen interessiert das? Was hat es mit der Frage zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231049</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 17:00:46 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 17:07:20 GMT]]></title><description><![CDATA[<p>Wie ich annehme, den TE, da</p>
<p>astir schrieb:</p>
<blockquote>
<p>...damit ich dann die beiden Teile des Strings, wo die Operanden stehen, in einen double umwandeln kann...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2231050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231050</guid><dc:creator><![CDATA[redrew99]]></dc:creator><pubDate>Sun, 08 Jul 2012 17:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 17:13:04 GMT]]></title><description><![CDATA[<p>Einen Lexer halte ich auch für übertrieben. Genauso einen AST. Einfach auswerten während man parst, davor eine Grammatik aufstellen. Dürfte nicht besonders schwer sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231051</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 08 Jul 2012 17:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 17:17:00 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Einen Lexer halte ich auch für übertrieben. Genauso einen AST. Einfach auswerten während man parst, davor eine Grammatik aufstellen. Dürfte nicht besonders schwer sein.</p>
</blockquote>
<p>Naja, aber irgendwo muss der Parser ja erkennen, ob er grad eine Zahl oder einen Operator an der Hand hat, und das macht man am einfachsten mit einem Lexer. Finde ich jetzt nicht weiter schwer oder übertrieben. Ein AST wär hier erstmal wahrscheinlich schon übertrieben, geb ich dir Recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231052</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 17:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 17:26:47 GMT]]></title><description><![CDATA[<p><a href="http://ideone.com/b6Nyk" rel="nofollow">http://ideone.com/b6Nyk</a><br />
Fand ich jetzt nicht besonders schwer ohne Lexer. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231054</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 08 Jul 2012 17:26:47 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 19:52:24 GMT]]></title><description><![CDATA[<p>Ihr verwirrt mich nur ncoh mehr.</p>
<p>Es muss ja nach einer der beiden Methoden gehen, denn das wurde uns als Lösungsansatz gegeben....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231091</guid><dc:creator><![CDATA[astir]]></dc:creator><pubDate>Sun, 08 Jul 2012 19:52:24 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 19:55:30 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>astir schrieb:</p>
<blockquote>
<p>Ja aber es muss doch auch so gehen?</p>
<p>Oder soll ich die Operanden und Rechenzeichen einzeln abfragen lassen und in eine Liste schieben?</p>
</blockquote>
<p>Jein. Das könnte schon gehen. Aber das ist alles andere als sauber oder schön. Was machst du mit verschachtelten Klammern? Da dürfte deine Methode ziemlich schnell scheitern. Ich würde es erst gar nicht damit probieren.</p>
</blockquote>
<p>Genau aus dem Grund wollte ich den etwas komplexeren Ansatz mit Strings wählen, komm da aber auch nciht weiter...ich bin ehct zu blöd für sowas... <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231094</guid><dc:creator><![CDATA[astir]]></dc:creator><pubDate>Sun, 08 Jul 2012 19:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 20:16:39 GMT]]></title><description><![CDATA[<p>Die Lösung, die Kellerautomat gepostet hat, ist doch recht brauchbar, darauf kannst du aufbauen. Was ich nicht ganz optimal finde, ist die Verwendung von char *, vielleicht kannst du das besser lösen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231100</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 20:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 20:37:58 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Die Lösung, die Kellerautomat gepostet hat, ist doch recht brauchbar, darauf kannst du aufbauen. Was ich nicht ganz optimal finde, ist die Verwendung von char *, vielleicht kannst du das besser lösen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ja - alle sind irgendwie ganz verliebt in diese Bereiche, die schon im Memory liegen und vorne zeigt ein Pointer (char*) drauf. Auch der TE hätte die Zeichen gerne in einem string vorliegen, um sich dann mit find und find_first_of an das Zerlegen desselben zu begeben.<br />
Dabei geht es hier doch ganz klar um einen Input.<br />
Was viele nicht wissen: für den Input haben die Götter des C++ den std::istream erfunden. Und dessen Lexer-Qualitäten kann man sich in diesem Fall zu Nutze machen, indem man einfach abfragt ob das nächste Zeichen, was daher kommt, ein Operator, also ein Zeichen aus einem begrenzten Vorrat &quot;+-*/&quot; ist. Da kann man auch noch auf Klammer abfragen, aber viel mehr wird es dann nicht mehr und alles andere sollte eine Zahl sein. Und wenn ein Lesefehler auftritt, dann ist halt die Eingabe fehlerhaft. Da braucht man auch keine Exception, sondern nur den std::istream auf fail abfragen.</p>
<p>Und das ganze sieht dann so aus, wie bei diesem <a href="http://www.c-plusplus.net/forum/p1642138#1642138" rel="nofollow">Taschenrechnerprogramm</a>. Das ist dann fast der gleiche Code, den Kellerautomat schon vorgelegt hat, nur mit dem Unterschied, dass man dann 'Zahl' auch zu 'irgendeine Größe' abstrahieren kann, und dann werden auch Dinge <a href="http://www.c-plusplus.net/forum/p1989425" rel="nofollow">wie dies hier</a> möglich.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231104</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 08 Jul 2012 20:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 20:54:31 GMT]]></title><description><![CDATA[<p>Sorry Werner, aber meinen Ansatz finde ich da viel schöner. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231107</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 08 Jul 2012 20:54:31 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 20:59:26 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Sorry Werner, aber meinen Ansatz finde ich da viel schöner. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Der eigene Code ist immer schöner - da bin ich ganz Deiner Meinung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Oder gibt es noch ein Argument für char* statt std::istream?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231108</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 08 Jul 2012 20:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 21:11:14 GMT]]></title><description><![CDATA[<p>Der Hauptgrund ist wohl, dass ich ctest nicht verstehe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Nach dem zweiten mal hinsehen finde ich es gar nicht mal so schlecht, vielleicht probiere ich das mal aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231111</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 08 Jul 2012 21:11:14 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 21:11:45 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Sorry Werner, aber meinen Ansatz finde ich da viel schöner. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Doch, den Code von Werner finde ich schon sehr schick. Aber ich denke, das wird für den TE auch etwas schwer zu verdauen sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231112</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Sun, 08 Jul 2012 21:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 21:31:47 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Sorry Werner, aber meinen Ansatz finde ich da viel schöner. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Doch, den Code von Werner finde ich schon sehr schick. Aber ich denke, das wird für den TE auch etwas schwer zu verdauen sein...</p>
</blockquote>
<p>Ja, da hast Du Recht. Das mit Templates kann man natürlich auch weglassen, mir ging es eben eher darum, auf die Verwendung von std::istream statt char* hinzuweisen.</p>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Der Hauptgrund ist wohl, dass ich ctest nicht verstehe.</p>
</blockquote>
<p>Ja - und genau das ist auch einer der Knackpunkte.<br />
Nur - es fragt kein Mensch hier im Forum, wie man das nächste Zeichen aus einem std::istream abfragt, ohne es 'zu lesen'. Aber jeden Monat kommt jemand mit der Frage wie man einen mathematischen Ausdruck aus einem String heraus holt, und mehr als zwei pro Woche fragen wie man aus einem (meist kurz vorher mit getline gelesenen) String Zahlen oder andere Werte heraus bekommt.<br />
Und die Antwortenden gehen meist auch immer drauf ein. Sie geben auch i.A. die passenden Antworten in Richtung Parser, und entsprechend Algorithmen, nur der Hinweis auf den std::istream, der für den Input gebaut wurde, das kommt selten. Wobei der std::istream weder alles kann, noch einfach zu handeln ist.</p>
<p>Bei std::istream ist wohl einiges beim Marketing schief gelaufen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231118</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 08 Jul 2012 21:31:47 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Mon, 09 Jul 2012 07:03:39 GMT]]></title><description><![CDATA[<p>Mechanics schrieb:</p>
<blockquote>
<p>.. Aber ich denke, das wird für den TE auch etwas schwer zu verdauen sein...</p>
</blockquote>
<p>Ok - hier noch mal eine einfacherer Fassung:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct Term // Produkt oder Ausdruck mit Division
{
    Term( int&amp; target ) : target_( &amp;target ) {}
    int* target_;
};
struct Expression // der ganze Ausdruck, hier: Summe oder Differenz
{
    Expression( int&amp; target ) : target_( &amp;target ) {}
    int* target_;
};

std::istream&amp; operator&gt;&gt;( std::istream&amp; in, Term t )
{
    typedef int Wert;
    Wert x1;
    in &gt;&gt; x1;
    for( char op; in &gt;&gt; op; )
    {
        switch( op )
        {
        case '*':
            {
                Wert x2;
                if( in &gt;&gt; x2 )
                    x1 *= x2;
            }
            break;
        case '/':
            {
                Wert x2;
                if( in &gt;&gt; x2 )
                    x1 /= x2;
            }
            break;
        default:
            in.putback( op );
            *t.target_ = x1;
            return in;
        }
    }
    return in;
}

std::istream&amp; operator&gt;&gt;( std::istream&amp; in, Expression e )
{
    typedef int Wert;
    Wert x1;
    in &gt;&gt; Term( x1 );
    for( char op; in &gt;&gt; op; )
    {
        switch( op )
        {
        case '+':
            {
                Wert x2;
                if( in &gt;&gt; Term( x2 ) )
                    x1 += x2;
            }
            break;
        case '-':
            {
                Wert x2;
                if( in &gt;&gt; Term( x2 ) )
                    x1 -= x2;
            }
            break;
        default:
            in.putback( op ); // kein Operator '+' '-', dann Zeichen zurück in den stream
            *e.target_ = x1;
            return in; // fertig
        }
    }
    return in;
}

int main()
{
    using namespace std;
    for( int x; cout &lt;&lt; &quot;\nGeben Sie die Rechnung ein (Beenden mit ';'): &quot;, cin &gt;&gt; Expression( x); cin.ignore( 1, '\n' ) )
        cout &lt;&lt; &quot;= &quot; &lt;&lt; x&lt;&lt; endl;
    return 0;
}
</code></pre>
<p>hallo astir,<br />
ist das verständlich?</p>
<p>@Edit: Tippfehler '/n' -&gt; '\n'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231124</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 09 Jul 2012 07:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Rechenprogramm mit strings on Sun, 08 Jul 2012 22:39:13 GMT]]></title><description><![CDATA[<p>Hey,</p>
<p>danke, aber glaub erklären könnte ich das nicht....wir haben auch soetwas noch gar nicht gemacht.</p>
<p>Ich hab grad ganz andere Probleme. Erst funktioniert alles schön und dann kommt auf einmal beim Debuggen folgendes: &quot;Das aufgerufene Projekt wurde von den Clients getrennt&quot;.<br />
Kann mir jemand sagen was da heißt, bzw. was ich evtl. falsch gemacht habe?</p>
<p>Ist egrade echt alles deprimierend <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2231127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2231127</guid><dc:creator><![CDATA[astir]]></dc:creator><pubDate>Sun, 08 Jul 2012 22:39:13 GMT</pubDate></item></channel></rss>