<?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[Einen string in Token zerlegen]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich möchte einen string, wie z.b.&quot;22+1*2&quot; so zerlegen lassen, dass 22 ein integer ist,+ ein char,1 ein integer,*ein char und 2 wieder ein integer.</p>
<p>Gibt es da eine Funktion,die mir dabei helfen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293857/einen-string-in-token-zerlegen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 05:44:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293857.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Oct 2011 11:02:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:02:35 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich möchte einen string, wie z.b.&quot;22+1*2&quot; so zerlegen lassen, dass 22 ein integer ist,+ ein char,1 ein integer,*ein char und 2 wieder ein integer.</p>
<p>Gibt es da eine Funktion,die mir dabei helfen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130393</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:02:35 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:09:58 GMT]]></title><description><![CDATA[<p>evtl. <code>std::istream::get()</code></p>
<p>Oder du bedienst dich eines fertigen Lexer/Parser Generators oder einer entsprechenden Bibliothek...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130395</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:09:58 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:15:26 GMT]]></title><description><![CDATA[<p>Ich habe es mit der Funktion strtok() ausprobiert. Aber diese scheint nur an den white_space zeichen zu splitten. Wenn ich &quot;2+2*2&quot; splitten lasse, gibt er den kompletten string &quot;2+2*2&quot; einfach wieder aus.</p>
<p>Wenn ich es stattdessen mit dem string &quot;Hello World 123&quot; mache trennt er korekt und gibt:<br />
&quot;Hello<br />
World<br />
123&quot;</p>
<p>aus.</p>
<p>Wie muss ich den Code:</p>
<pre><code class="language-cpp">#include &quot;../../../std_lib_facilities.h&quot;
#include &quot;conio.h&quot;

#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main ()
{
  char str[] =&quot;2+2*2&quot;;
  char * pch;
  printf (&quot;Splitting string \&quot;%s\&quot; into tokens:\n&quot;,str);
  pch = strtok (str,&quot; ,.-&quot;);
  while (pch != NULL)
  {
    printf (&quot;%s\n&quot;,pch);
    pch = strtok (NULL, &quot; ,.-&quot;);
  }
  getch();
  return 0;
}
</code></pre>
<p>modifizieren,dass er auch &quot;2+2*2&quot; in 2,+,2,*,2 splittet?</p>
<p>Ich hatte an folgendes gedacht: Eine Funktion, die nachträglich in den string whitespacezeichen einfügt. Gibt es so etwas?</p>
<p>Bsp: string = &quot;2+2*2&quot; , die Funktion würde dann nachträglich folgendes machen:<br />
string = &quot;2 + 2 * 2&quot;. Dann würde nämlich auch die strtok() Funktion funzen.</p>
<p>Gibt es solch eine &quot;white-space-maker&quot; Funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130398</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:18:19 GMT]]></title><description><![CDATA[<p>Na überleg dir doch mal was du genau machen willst. Du musst deinem Code eben beibringen, welche Zeichen zu welcher Art von Token gehören können, damit er dann entscheiden kann, wo ein Token aufhört und ein neues beginnt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130402</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:18:19 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:33:48 GMT]]></title><description><![CDATA[<p>Im Grunde möchte ich mit dieser white-space sache erreichen,dass zahlen mit mehr als einer Ziffe z.b. 125 auch direkt als 125 dann weiterverwendet werden können und nicht die ziffern einzeln als token dort liegen und sie erst &quot;aufwendig&quot; zusammengesetzt werden müssen. Das könnte man so lösen,dass die &quot;white-space-maker&quot; Funktion nur die whitespaces vor und nach den Operatoren setzt, dann wäre es egal wie groß die zahl ist, sie wäre komplett.<br />
Danach würde dann die strtok drüber gehen und alles korekt aufspalten.</p>
<p>Wichtig wäre mir zu wissen, ob es so eine white-space-maker Funktion (oder wie auch immer) gibt und wie ich an sie rankomme. <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/2130407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130407</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:38:13 GMT]]></title><description><![CDATA[<p>Was genau sollte diese white-space-maker Funktion tun!? Du hast doch dein Problem eh schon erkannt, wo genau liegt jetzt das Problem eine Lösung dafür zu implementieren. Du willst also dass die ganze Zahl als ein Token genommen wird und nicht nur einzelne Ziffern? Na dann machs doch genau so!? Du musst dir eben merken ob du gerade eine Ziffer gelesen hast und wenn ja, fügst du jede weitere Ziffer an die vorhergehenden Ziffern an, um deine Zahl zu erhalten!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130410</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:41:28 GMT]]></title><description><![CDATA[<p>Golfi1812 schrieb:</p>
<blockquote>
<p>ich möchte einen string, wie z.b.&quot;22+1*2&quot; so zerlegen lassen, dass 22 ein integer ist,+ ein char,1 ein integer,*ein char und 2 wieder ein integer.</p>
<p>Gibt es da eine Funktion,die mir dabei helfen kann?</p>
</blockquote>
<p>Dieser <a href="http://www.c-plusplus.net/forum/p1642138" rel="nofollow">Expression-Parser</a> ist (wahrscheinlich) genau das was Du brauchst.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130414</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:41:28 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 11:54:56 GMT]]></title><description><![CDATA[<p>Danke Werner, das habe ich gesucht,doch bei einer Sache brauche ich noch Hilfe:</p>
<p>Kann man deinen Parser so umschreiben, dass man ihn einfach in ein Programm einbinden kann?</p>
<p>Bsp: Ich habe ein Programm, es liest Variablen ein ,gibt sie aus und so weiter.<br />
doch dann muss die Eingabe des Benutzers z.b.2+2<em>2 ausgrechnet werden.<br />
Dann baut man an dieser Stelle im Programm sozusagen eine Brücke ein, die die Einagbe (2+2</em>2) an deinen Parser sendet und der Parser dann das Endergebniss in eine Variable zurückliefert.</p>
<p>Wie müsste ich deinen Parser dann umschreiben, dass er wie eine Funktion mit einem Argument &quot;gefüttert&quot; werdden kann und dann das Endergebniss zurückliefert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130429</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Wed, 12 Oct 2011 11:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 12:08:33 GMT]]></title><description><![CDATA[<p>Den Parser kannst Du so wie er ist nutzen. Der Königsweg sähe so aus, dass an der Stelle, wo Du die Benutzer-Eingabe liest, ein std::istream zur Verfügung steht. Also:</p>
<pre><code class="language-cpp">std::istream input( /*der User*/ );
    double val;
    if( input &gt;&gt; expression( val ) )
        // der Inhalt von 'val' enthält das Ergebnis
</code></pre>
<p>das ist alles.</p>
<p>Falls Du keinen std::istream hast, so schreibe den Text einfach in einen istringstream.</p>
<pre><code class="language-cpp">std::string userEingabe = /* Dein Ding */;
    std::istringstream input( userEingabe );
    double val;
    if( input &gt;&gt; expression( val ) )
        // der Inhalt von 'val' enthält das Ergebnis
</code></pre>
<p>siehe dazu auch das main() am Ende meines Listing, hinter dem Link oben.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130435</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 12 Oct 2011 12:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 12:53:48 GMT]]></title><description><![CDATA[<p>Golfi1812, &quot;Dein&quot; Code ist doch nur <a href="http://www.cplusplus.com/reference/clibrary/cstring/strtok/" rel="nofollow">der hier</a>, den Du mit</p>
<pre><code class="language-cpp">#include &quot;../../../std_lib_facilities.h&quot;
#include &quot;conio.h&quot;
::
char str[] =&quot;2+2*2&quot;;
::
getch();
</code></pre>
<p>angereichert hast. Wie auch in Deinem vorherigen Thread kann man hier sehen, dass Du Dir der Bedeutung des Wortes &quot;Token&quot; nicht wirklich bewusst bist. Was ein Token <em>im konkreten Fall</em> ist und was nicht, ist Definitionssache. Es gibt keine universelle Token-Parsing-Routine, die eine Zeichenkette in mehrere aufteilt. Das liegt daran, dass, je nachdem, was Du machen willst, diese Zerlegung anders aussehen wird. strtok orientiert sich da an &quot;Begrenzungszeichen&quot; (Delimiter), die Du selbst festlegen kannst und es ja auch tust (mit &quot; ,.-&quot; bei strtok).</p>
<p>Was ich sehr schade finde, ist, dass Du ein tolles, modernes <strong>C++</strong> Buch vor Deiner Nase liegen hast (Stroustrups &quot;Einführung in die Programmierung mit <strong>C++</strong>&quot;) und trotzdem per Copy&amp;Paste Dir da etwas fast ausschließlich C-artiges zusammengefrickelt hast (ohne ++).</p>
<p>Wa sich auch sehr schade finde ist, dass Du im anderen Thread gewagt hast zu sagen &quot;wenn du nicht weißt, was ein token ist, solltest du vielleicht gar nicht antworten&quot; ohne selbst dabei nur den blassesten Schimmer zu haben. Mit solchen Inkompetenz-Demonstrationen disqualifiziert man sich ganz schnell und wird eher links liegen gelassen.</p>
<blockquote>
<p>Ich hatte an folgendes gedacht: Eine Funktion, die nachträglich in den string whitespacezeichen einfügt. Gibt es so etwas?</p>
<p>Bsp: string = &quot;2+2*2&quot; , die Funktion würde dann nachträglich folgendes machen:<br />
string = &quot;2 + 2 * 2&quot;. Dann würde nämlich auch die strtok() Funktion funzen.</p>
</blockquote>
<p>Und woher soll diese Funktion wissen, wo Leerzeichen eingefügt werden sollen? Muss sie dazu nicht schon wissen, wo &quot;Tokens&quot; anfangen und aufhören? Das Problem, Tokens zu identifizieren, besteht dann weiterhin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130458</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 12 Oct 2011 12:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 13:06:32 GMT]]></title><description><![CDATA[<p>Kann ich eigentlich auch den Inhalt einer Variable in den Eingabestream lesen?</p>
<p>z.b.:</p>
<pre><code class="language-cpp">int a = 2;
a &gt;&gt; cin;
</code></pre>
<p>oder einfach die Operatoren &gt;&gt; auch verwenden um Variablen untereinander zu verändern?</p>
<p>Ich würde nämlich gerne an deinem Parser folgendes ändern:</p>
<p>In der main() möchte ich,dass nicht aus &quot;cin &gt;&gt; noskipws&quot; sonder aus einer string variable in noskipws eingelesen wird:</p>
<pre><code class="language-cpp">sting r = &quot;2+2*2&quot;;
r &gt;&gt; noskipws;
</code></pre>
<p>Wie kann ich das erreichen?</p>
<p>Gibt es da eine Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130465</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Wed, 12 Oct 2011 13:06:32 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 13:20:52 GMT]]></title><description><![CDATA[<p>Siehe std::stringstream und Konsorten.<br />
Vielleicht arbeitest Du erstmal Dein Buch weiter durch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130477</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 12 Oct 2011 13:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 16:10:06 GMT]]></title><description><![CDATA[<p>Golfi1812 schrieb:</p>
<blockquote>
<p>In der main() möchte ich,dass nicht aus &quot;cin &gt;&gt; noskipws&quot; sonder aus einer string variable in noskipws eingelesen wird:</p>
<pre><code class="language-cpp">sting r = &quot;2+2*2&quot;;
r &gt;&gt; noskipws;
</code></pre>
<p>Wie kann ich das erreichen?</p>
<p>Gibt es da eine Möglichkeit?</p>
</blockquote>
<p>Hallo Golfi,</p>
<p>genau das habe ich versucht, Dir hier zu erklären.</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Falls Du keinen std::istream hast, so schreibe den Text einfach in einen istringstream.</p>
<pre><code class="language-cpp">std::string userEingabe = /* Dein Ding */;
    std::istringstream input( userEingabe );
    double val;
    if( input &gt;&gt; expression( val ) )
        // der Inhalt von 'val' enthält das Ergebnis
</code></pre>
<p>siehe dazu auch das main() am Ende meines Listing, hinter dem Link oben.</p>
</blockquote>
<p>Setze einfach <code>r</code> gleich <code>userEingabe</code> . Du hast irgendwas nicht verstanden, ich weiß aber nicht was? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130599</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 12 Oct 2011 16:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Wed, 12 Oct 2011 19:11:58 GMT]]></title><description><![CDATA[<p>In welche Funktion muss ich das:</p>
<pre><code class="language-cpp">std::string userEingabe = /* Dein Ding */; 
    std::istringstream input( userEingabe ); 
    double val; 
    if( input &gt;&gt; expression( val ) ) 
        // der Inhalt von 'val' enthält das Ergebnis
</code></pre>
<p>einsetzen bzw. was muss ich damit ersetzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130677</guid><dc:creator><![CDATA[Golfi1812]]></dc:creator><pubDate>Wed, 12 Oct 2011 19:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to Einen string in Token zerlegen on Thu, 13 Oct 2011 07:01:41 GMT]]></title><description><![CDATA[<p>In Deine Funktion, da wo Du die Eingabe des Users zur Verfügung hast, und daraus den Wert der Eingabe bestimmen möchtest.</p>
<pre><code class="language-cpp">string r = &quot;2+2*2&quot;;
    string userEingabe = r; // Dein Ding
    istringstream input( userEingabe );
    double ergebnis;
    if( input &gt;&gt; expression( ergebnis ) )
    {
        // der Inhalt von 'ergebnis' enthält das Ergebnis; in diesem Fall von r=&quot;2+2*2&quot; den Wert 6.0
</code></pre>
<p>ich verstehe Dein Problem nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130801</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 13 Oct 2011 07:01:41 GMT</pubDate></item></channel></rss>