<?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[Chat - Interpreter Programmieren]]></title><description><![CDATA[<p>Hi,<br />
ich möchte für ein Chatprogramm mit Winsock einen Interpreter für bestimmte Befehle schreiben.</p>
<p>Beispiel:</p>
<p>Ich sende &quot;MSGBOX User123 Wichtig Komm mal ins ICQ&quot;</p>
<p>der Befehl würde lauten:<br />
MSGBOX User Titel Nachricht,<br />
und ich müsste das ganze jetzt zersetzen, also so etwa:</p>
<p>1. mit find() MSGBOX finden, erkennen, dass eine MessageBox bei dem User erstellt werden soll<br />
2. die Nachricht &quot;zersetzen&quot;, nach User = User123, Title = Wichtig, Content = Komm mal ins ICQ<br />
3. Die MessageBox erzeugen mit MessageBox(0, &quot;Komm mal ins ICQ&quot;, &quot;Wichtig&quot;, MB_OK);</p>
<p>also,</p>
<p>1. Ist das mit String Funktionen machbar, oder gibts bessere Möglichkeiten?<br />
2. Wenn String Funktionen die beste Lösung sind, könnt ihr mir ein paar hier gut anwendbare nennen?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237349/chat-interpreter-programmieren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 11:56:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237349.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Mar 2009 13:07:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 13:08:06 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich möchte für ein Chatprogramm mit Winsock einen Interpreter für bestimmte Befehle schreiben.</p>
<p>Beispiel:</p>
<p>Ich sende &quot;MSGBOX User123 Wichtig Komm mal ins ICQ&quot;</p>
<p>der Befehl würde lauten:<br />
MSGBOX User Titel Nachricht,<br />
und ich müsste das ganze jetzt zersetzen, also so etwa:</p>
<p>1. mit find() MSGBOX finden, erkennen, dass eine MessageBox bei dem User erstellt werden soll<br />
2. die Nachricht &quot;zersetzen&quot;, nach User = User123, Title = Wichtig, Content = Komm mal ins ICQ<br />
3. Die MessageBox erzeugen mit MessageBox(0, &quot;Komm mal ins ICQ&quot;, &quot;Wichtig&quot;, MB_OK);</p>
<p>also,</p>
<p>1. Ist das mit String Funktionen machbar, oder gibts bessere Möglichkeiten?<br />
2. Wenn String Funktionen die beste Lösung sind, könnt ihr mir ein paar hier gut anwendbare nennen?</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686931</guid><dc:creator><![CDATA[Arr0ws]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:08:06 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 14:39:35 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/string/string/" rel="nofollow">std::string</a></p>
<p>Schau dir mal find() und substr() an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686999</guid><dc:creator><![CDATA[JustSomeCoder]]></dc:creator><pubDate>Fri, 27 Mar 2009 14:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 14:47:13 GMT]]></title><description><![CDATA[<blockquote>
<p>1. Ist das mit String Funktionen machbar, oder gibts bessere Möglichkeiten?</p>
</blockquote>
<p>Die gibts immer <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="😃"
    /><br />
Du könntest eine ScriptSprache integrieren, wie AngelScript und MsgBox einfach als Funktion in Angelscript anmelden. Wenn die Eingabe des Users im Chat nun als Bsp. ein &quot;/&quot; vorne dran hat, dann sendest du das einfach als RawString an die ScriptEngine und die führt das aus.<br />
Bsp:<br />
/MsgBox(&quot;Komm mal ins ICQ&quot;, &quot;Wichtig&quot;);<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687004</guid><dc:creator><![CDATA[scorcher24 | off]]></dc:creator><pubDate>Fri, 27 Mar 2009 14:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 19:39:34 GMT]]></title><description><![CDATA[<p>[quote=&quot;scorcher24 | off]...[/quote]Was soll hier der Vorteil einer Skriptsprache sein? Interpretieren lassen sich die Befehle in C++ genauso gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687142</guid><dc:creator><![CDATA[lalalala]]></dc:creator><pubDate>Fri, 27 Mar 2009 19:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 20:20:16 GMT]]></title><description><![CDATA[<p>Okay, das mit substr() funktioniert, und ich kann auch einen Befehl auslesen - aber nur EINEN: (Pseudocode)</p>
<p>IF (Befehl = Msgbox)<br />
{<br />
pos = Befehl.find(MsgBox);<br />
Parameter = Befehl.substr(pos + 7); // Msgbox = 6 Zeichen + Leerstelle<br />
//...<br />
}</p>
<p>So, ab hier kann ich also dann direkt den Befehl verarbeiten, der &quot;Msgbox&quot; folgt.</p>
<p>Aber wie soll ich das mit 2 Parameter machen? Msgbox [Titel] [Nachricht]?<br />
Muss ich dann da jeweils ein Zeichen davor setzen? Zb. Msgbox [/Titel] [/Nachricht]? Dann könnte ich ja direkt nach dem Zeichen suchen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687151</guid><dc:creator><![CDATA[Arr0ws]]></dc:creator><pubDate>Fri, 27 Mar 2009 20:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 20:36:02 GMT]]></title><description><![CDATA[<p>Irgendwie so, ungetestet:</p>
<pre><code class="language-cpp">void MsgBox( const std::string&amp; par )
{
    // Format: TITEL NACHRICHT

    // Erstes Leerzeichen finden
    size_t space_pos = par.find( ' ' );
    if ( space_pos == std::string::npos )
        throw std::exception( &quot;Falsches Format beim MSGBOX-Befehl&quot; );

    // Titel und Nachricht extrahieren
    std::string title = par.substr( 0, space_pos );
    std::string msg   = par.substr( space_pos+1 );

    // Irgendwie weiter verfahren..
}

void Whatever( const std::string&amp; par )
{
    ...
}

// Falls Kommando =&gt; Wird hier behandelt, gibt true zurück.
//             Sonst gibt false zurück
bool HandleCommand( const std::string&amp; command )
{
    // Handler aufsetzen
    typedef void(*HandlerFunc)(const std::string&amp;);
    typedef std::map&lt;std::string,HandlerFunc&gt; Handler;

    static Handler handler;
    if ( handler.size() == 0 )
    {
        handler[&quot;MSGBOX &quot;] = &amp;MsgBox; // Evtl ohne Leerzeichen, je nachdem
        handler[&quot;WHATEVER &quot;] = &amp;Whatever;
        ...
    }

    // Nach Kommando im Handler suchen
    for ( Handler::const_iterator i=handler.begin(); i!=handler.end(); ++i )
    {
        size_t comm_size = i-&gt;first.size();
        if ( command.size()&gt;=comm_size &amp;&amp; command.substr(0,comm_size)==i-&gt;first )
        {
            // Gefunden, aufrufen
            i-&gt;second( command.substr(comm_size) );
            return true;
        }
    }

    // Kein passender Handler gefunden
    return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1687157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687157</guid><dc:creator><![CDATA[bade_off]]></dc:creator><pubDate>Fri, 27 Mar 2009 20:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 22:00:42 GMT]]></title><description><![CDATA[<p>Arr0ws schrieb:</p>
<blockquote>
<p>Ich sende &quot;MSGBOX User123 Wichtig Komm mal ins ICQ&quot;</p>
<p>der Befehl würde lauten:<br />
MSGBOX User Titel Nachricht,</p>
</blockquote>
<p>kann man doch einfach eine Skriptsprache zu benutzen, die Funktionsargumente ohne Klammern übergeben kann, und dort eine kleine DSL implementieren, deren Befehle dann im Interpreter aufgerufen werden.</p>
<p>Ich denke da mal an Tcl oder Smalltalk.</p>
<p>In Tcl kannst du schreiben</p>
<pre><code>proc MSGBOX {user titel nachricht} {
   ... sende an user die nachricht mit titel ...
}
</code></pre>
<p>und dann aufrufen mit etwas ähnlichem wie</p>
<pre><code>MSGBOX bill &quot;betr: wichtig&quot; &quot;doch nicht wichtig&quot;
</code></pre>
<p>In Smalltalk geht das ähnlich einfach, nur folgen die Argumente dann hinter Doppelpunkten:</p>
<pre><code>msgbox user: bill sub: 'wichtig' msg: 'jetzt mal egal'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1687172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687172</guid><dc:creator><![CDATA[u_ser-l]]></dc:creator><pubDate>Fri, 27 Mar 2009 22:00:42 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 22:04:49 GMT]]></title><description><![CDATA[<p>... natürlich nur, wenn Du hierfür nicht bereits auf C++ festgelegt bist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1687174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687174</guid><dc:creator><![CDATA[u_ser-l]]></dc:creator><pubDate>Fri, 27 Mar 2009 22:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Chat - Interpreter Programmieren on Fri, 27 Mar 2009 22:35:30 GMT]]></title><description><![CDATA[<p>Tausend Dank an bade_off! Dein Code war zwar nicht richtig, aber der hier geht<br />
(Ich habs jetzt doch mit &quot;-&quot; vor den Parametern gemacht, damit Messageboxen mit Leerzeichen auch ausgegeben werden können):</p>
<p>EDIT: Weil ich so nett bin, hier der ganze Code <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>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

string Input;

string str1, str2;

size_t pos;
size_t pos2;

int main()
{
    while(true)
    {
    cout &lt;&lt; &quot;Input:  &quot;;

    getline(cin, Input);

    // Fehlerabfrage:
    // 1. Ist MSGBOX an Erster Stelle?
    // 2. Ist &quot;-&quot; an 7. Stelle?
    // 3. Sind 2 &quot;-&quot; vorhanden?
    if (Input.find(&quot;MSGBOX&quot;) == 0)
    {

        if (Input.find(&quot;-&quot;) == 7 &amp;&amp; (Input.find(&quot;-&quot;) != Input.find_last_of(&quot;-&quot;)))
        {
        pos = Input.find(&quot;-&quot;);
        pos2 = Input.find_last_of(&quot;-&quot;);
        str1 = Input.substr(pos + 1, pos2-9);
        str2 = Input.substr(pos2 + 1);
        cout &lt;&lt; &quot;\nMessagebox(0, \&quot;&quot; &lt;&lt; str1 &lt;&lt; &quot;\&quot;, \&quot;&quot; &lt;&lt; str2 &lt;&lt; &quot;\&quot;, MB_OK);\n\n&quot;;
        }
        else
        {
        cout &lt;&lt; &quot;\nusage: MSGBOX -[TITLE] -[CONTENT]\n\n&quot;;
        }
    }

    else
    {
        cout &lt;&lt; &quot;\nUnknown Command\n\n&quot;;
    }

    }
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1687182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1687182</guid><dc:creator><![CDATA[Arr0ws]]></dc:creator><pubDate>Fri, 27 Mar 2009 22:35:30 GMT</pubDate></item></channel></rss>