<?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[Kommentar entfernen Funktion]]></title><description><![CDATA[<p>Seht ihr Verbesserungspotentital ? Zeitkomplexität worst case=(n²] , Speicherkomplexität konstant .</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdio.h&gt;

using namespace std;

void removeComment(char* str)
{
	int length,i,j;
	for(i=0,j=0;str[j];i++,j++)
	{

		if(str[j] == '/' &amp;&amp; str[j+1] == '*')
		{
			while( !(str[j] == '*' &amp;&amp; str[j+1] == '/'))
			{
				j++;
			}
			j +=2;
		}

		str[i] = str[j];

	}

	str[i]=0;
}

int main()
{

	char str[] = &quot;Aber hallo/*Das ist ein Kommentar*/ ich gehe morgen/*Ein Kommentar*/ ins Kino&quot;;

	removeComment(str);

	cout&lt;&lt;str;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/331727/kommentar-entfernen-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 15:13:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/331727.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Mar 2015 23:07:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Mon, 16 Mar 2015 23:07:23 GMT]]></title><description><![CDATA[<p>Seht ihr Verbesserungspotentital ? Zeitkomplexität worst case=(n²] , Speicherkomplexität konstant .</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdio.h&gt;

using namespace std;

void removeComment(char* str)
{
	int length,i,j;
	for(i=0,j=0;str[j];i++,j++)
	{

		if(str[j] == '/' &amp;&amp; str[j+1] == '*')
		{
			while( !(str[j] == '*' &amp;&amp; str[j+1] == '/'))
			{
				j++;
			}
			j +=2;
		}

		str[i] = str[j];

	}

	str[i]=0;
}

int main()
{

	char str[] = &quot;Aber hallo/*Das ist ein Kommentar*/ ich gehe morgen/*Ein Kommentar*/ ins Kino&quot;;

	removeComment(str);

	cout&lt;&lt;str;

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2446979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2446979</guid><dc:creator><![CDATA[Sven89]]></dc:creator><pubDate>Mon, 16 Mar 2015 23:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Mon, 16 Mar 2015 23:33:32 GMT]]></title><description><![CDATA[<p>Unbenutzte Variable: length.<br />
stdio.h ist cstdio in C++. du nutzt sowieso nichts aus diesem Header.<br />
Deine Zeitkomplexität ist tatsächlich O(n).</p>
<p>Dein Algorithmus ist falsch. Probier mal:</p>
<pre><code>char str[] = &quot;Aber hallo/*Das ist ein Kommentar*//* dies auch*/ ich gehe morgen/*Ein Kommentar*/ ins Kino&quot;;
</code></pre>
<p>oder</p>
<pre><code>char str[] = &quot;Aber hallo/*Das ist ein Kommentar am Ende*/&quot;;
</code></pre>
<p>oder</p>
<pre><code>char str[] = &quot;Aber hallo/*Das ist ein Kommentar ohne Ende&quot;;
</code></pre>
<p>Während Nummer 1 und Nummer 3 offensichtliche Fehler produzieren sollten, ist der Fehler beim zweiten eventuell zu subtil, um bei einem einfachen Testlauf wahrgenommen zu werden. Denk am besten selber mal durch, was da wohl passieren könnte. Oder nutz einen Debugger. Eventuell läuft auch Nummer 3 ohne Fehler durch, aber es sollte leicht nachvollziehbar sein, wieso dieses Beispiel trotzdem fehlerhaftes Verhalten erzeugen kann.</p>
<p>Allgemein wär's natürlich schicker, wenn das auf string statt auf nicht-const char-Arrays liefe; oder noch viel besser: Auf beliebigen Zeichensequenzen. Vermutlich ist das aber noch ein bisschen zu hoch für dich. Sieh es als Bemerkung für die Zukunft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2446980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2446980</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 16 Mar 2015 23:33:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 01:44:37 GMT]]></title><description><![CDATA[<p>ja (2) verursacht keinen Fehler aber er hat halt dann 2 Nullterminierungen <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>
<p>Fall 1 ist klar ein Fehler.</p>
<p>Den Algo kann man sicher einfacher gestalten. Aber ist schon schwer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2446985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2446985</guid><dc:creator><![CDATA[XX]]></dc:creator><pubDate>Tue, 17 Mar 2015 01:44:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 02:05:55 GMT]]></title><description><![CDATA[<p>Fall 2 ist kein Problem da werden halt 2 Nullterminierungen geschrieben.</p>
<p>Und das hier sollte Fall 3 lösen</p>
<pre><code>if(str[j] == '/' &amp;&amp; str[j+1] == '*')
		{
			while(str[j+1]!= 0 &amp;&amp; !(str[j] == '*' &amp;&amp; str[j+1] == '/' ))
			{
				j++;
			}
			if(str[j+1] != 0)
				j +=2;
			else
				j++;
		}

}
</code></pre>
<p>Allgemein glaub ich ist die Implementierung noch etwas umständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2446986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2446986</guid><dc:creator><![CDATA[XX]]></dc:creator><pubDate>Tue, 17 Mar 2015 02:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 03:48:07 GMT]]></title><description><![CDATA[<p>XX schrieb:</p>
<blockquote>
<p>ja (2) verursacht keinen Fehler aber er hat halt dann 2 Nullterminierungen <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>
</blockquote>
<p>Das war nicht, was ich meinte. Achte auf die Abbruchbedingung der for-Schleife in Zeile 9. Welchen Wert hat j, wenn diese geprüft wird?</p>
<blockquote>
<p>Allgemein glaub ich ist die Implementierung noch etwas umständlich.</p>
</blockquote>
<p>So ist es. Ich würde erst einmal eine Implementierung machen, die mit ein paar Flags und Zählern arbeitet: In Kommentar, J/N? Letztes Zeichen war ein * oder / (je nachdem, ob wir gerade im Kommentar sind oder nicht), J/N? Wie viele Zeichen haben wir schon kopiert? Dann einfach durchlaufen bis Ende ('\0') und wenn wir außerhalb eines Kommentars sind, Zeichen kopieren. Dabei anhand der Flags feststellen, wann wir von Kommentar zu nicht-Kommentar wechseln und umgekehrt. Danach kann man weiter schauen, ob man noch was eleganteres finden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2446991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2446991</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 17 Mar 2015 03:48:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 08:51:37 GMT]]></title><description><![CDATA[<p>Sowas kann man ganz einfach mit einem Zustandsautomaten lösen.</p>
<pre><code>void removeComment(char* str)
{
  enum {
    state_0,
    state_cbegin,
    state_comment,
    state_cend
  } state = state_0;

  char* target = str;
  for (const char* p = str; *p; ++p)
  {
    switch (state)
    {
      case state_0:
        if (*p == '/')
          state = state_cbegin;
        else
          *target++ = *p;
        break;

      case state_cbegin:
        if (*p == '*')
          state = state_comment;
        else if (*p == '/')
        {
          *target++ = '/';
        }
        else
        {
          *target++ = '/';
          *target++ = *p;
          state == state_0;
        }
        break;

      case state_comment:
        if (*p == '*')
          state = state_cend;
        break;

      case state_cend:
        if (*p == '/')
          state = state_0;
        else if (*p == '*')
          ;
        else
          state = state_comment;
        break;
    }
  }

  *target = '\0';

  if (state != state_0)
    throw std::runtime_error(&quot;incomplete comment&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2447008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447008</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Tue, 17 Mar 2015 08:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 09:06:10 GMT]]></title><description><![CDATA[<p>&lt; Oder damit</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447012</guid><dc:creator><![CDATA[RegEx]]></dc:creator><pubDate>Tue, 17 Mar 2015 09:06:10 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 09:25:17 GMT]]></title><description><![CDATA[<p>RegEx schrieb:</p>
<blockquote>
<p>&lt; Oder damit</p>
</blockquote>
<p>Das ist ein Zustandsautomat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447015</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 17 Mar 2015 09:25:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kommentar entfernen Funktion on Tue, 17 Mar 2015 09:38:46 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Das ist ein Zustandsautomat.</p>
</blockquote>
<p>Dann ist es natürlich absolut equivalent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2447018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2447018</guid><dc:creator><![CDATA[RegEx]]></dc:creator><pubDate>Tue, 17 Mar 2015 09:38:46 GMT</pubDate></item></channel></rss>