<?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[[C++] RLE mit Zahlen]]></title><description><![CDATA[<p>Hey Community!</p>
<p>Ich habe da mal eine Frage, und zwar habe ich schon viel herausgefunden, allerdings nicht das was ich suche. Ich habe in C++ eine Klasse geschrieben, welche mit der RLE einen Text komprimieren kann. Jetzt habe ich nur noch das Problem, dass wenn Zahlen im Text vorkommen ich Probleme bekomme^^</p>
<p>Also z.B. dieser String wird dekodiert:<br />
„AAAAAAGGH!”<br />
Ergebnis:<br />
„6AGGH!” (Da 1en eine Vergrößerung bringen und 2en unnötig sind werden beide nicht davorgeschrieben)</p>
<p>Also die Klasse funktioniert so, dass sie bei dem encoding den übergebenen String in ein Char-Array umwandelt und so einzelnd die Zeichen durchgehen kann. Bei diesem String:<br />
„AAA111B”<br />
würde aber folgendes rauskommen:<br />
„3A31B”<br />
Und das würde bei der Dekodierung zu diesem Ergebnis führen:<br />
AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</p>
<p>Wie kann ich das Problem lösen und auch Zahlen korrekt codieren und dekodieren?</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280044/c-rle-mit-zahlen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 06:04:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280044.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Jan 2011 10:38:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 10:38:43 GMT]]></title><description><![CDATA[<p>Hey Community!</p>
<p>Ich habe da mal eine Frage, und zwar habe ich schon viel herausgefunden, allerdings nicht das was ich suche. Ich habe in C++ eine Klasse geschrieben, welche mit der RLE einen Text komprimieren kann. Jetzt habe ich nur noch das Problem, dass wenn Zahlen im Text vorkommen ich Probleme bekomme^^</p>
<p>Also z.B. dieser String wird dekodiert:<br />
„AAAAAAGGH!”<br />
Ergebnis:<br />
„6AGGH!” (Da 1en eine Vergrößerung bringen und 2en unnötig sind werden beide nicht davorgeschrieben)</p>
<p>Also die Klasse funktioniert so, dass sie bei dem encoding den übergebenen String in ein Char-Array umwandelt und so einzelnd die Zeichen durchgehen kann. Bei diesem String:<br />
„AAA111B”<br />
würde aber folgendes rauskommen:<br />
„3A31B”<br />
Und das würde bei der Dekodierung zu diesem Ergebnis führen:<br />
AAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</p>
<p>Wie kann ich das Problem lösen und auch Zahlen korrekt codieren und dekodieren?</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004085</guid><dc:creator><![CDATA[C++Tester]]></dc:creator><pubDate>Sat, 08 Jan 2011 10:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 10:44:09 GMT]]></title><description><![CDATA[<p>Deine Probleme und mögliche Lösungen werden hier ausführlich anhand von Beispielen erläutert:<br />
<a href="http://de.wikipedia.org/wiki/Laufl%C3%A4ngenkodierung" rel="nofollow">http://de.wikipedia.org/wiki/Lauflängenkodierung</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004090</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 08 Jan 2011 10:44:09 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 10:49:07 GMT]]></title><description><![CDATA[<p>Dann musst du wohl Zahlen im Inputstring irgendwie<br />
- verbieten<br />
- kenntlich machen (&quot;Steuerzeichen&quot; --&gt; das darf dann sonst nicht vorkommen oder muss auch kenntlich gemacht werden)</p>
<p>Das geht zum bsp so:</p>
<p>&quot;Abbbbccccc3333deEF`````&quot; --&gt; &quot;Abbbbccccc`3`3`3`3deEF``````````&quot; --&gt; &quot;A4b5c4`3deEF5``&quot;</p>
<p>` heisst dann &quot;nimm das nächste Zeichen buchstabengetreu&quot; --&gt; führt aber zu verkompiziertem Parsen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004092</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Sat, 08 Jan 2011 10:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 11:59:36 GMT]]></title><description><![CDATA[<p>Wenn man sich die ASCII-Tabelle ansieht, sieht man, dass die Werte drei bis acht Steuerzeichen sind, die in einem normalen Text nicht vorkommen. So kannst du also einfach Wiederholungen von drei bis acht Zeichen kodieren. Falls das nicht ausreichen sollte und du im ASCII-Bereich bleiben willst, dann kannst du dir auch eine andere Eigenschaft von ASCII zur Hilfe nehmen. ASCII-Code ist nur 7Bit breit, das oberste Bit ist also frei. Bei UTF8 wird es zur Erkennung genutzt, ob es ein Mehrbytezeichen ist. Damit kannst du aber selber Werte bis 127 oder 129, wenn du 0 und 1 außen vor lässt, kodieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004120</guid><dc:creator><![CDATA[Paul Müller]]></dc:creator><pubDate>Sat, 08 Jan 2011 11:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 13:52:14 GMT]]></title><description><![CDATA[<p>Erstmal danke für die schnelle Hilfe <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>Hm.. also mit Markerzeichen davor, fände ich sehr unsauber..</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/903">@Paul</a> Müller<br />
Versteht ich net.. soll ich jetzt anstatt 1,2,3,4,5,6,7,8,9 Steuerzeichen aus der ASCII Tabelle benutzen? Wäre echt super, wenn du mir ien Beispiel geben könntest <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>Falls ihr den Code der Klasse braucht, dann sagt Bescheid (:</p>
<p>LG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004169</guid><dc:creator><![CDATA[C++Tester]]></dc:creator><pubDate>Sat, 08 Jan 2011 13:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 13:56:33 GMT]]></title><description><![CDATA[<p>C++Tester schrieb:</p>
<blockquote>
<p>Hm.. also mit Markerzeichen davor, fände ich sehr unsauber..</p>
</blockquote>
<p>Warum? Was wäre der Unterschied zur jetzigen Sonderbedeutung von Ziffern? Damit erschlägst du mit einem Mal alle Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004172</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 08 Jan 2011 13:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 14:17:37 GMT]]></title><description><![CDATA[<p>Weil dann die der String wieder größer wird <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/2004178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004178</guid><dc:creator><![CDATA[C++Tester]]></dc:creator><pubDate>Sat, 08 Jan 2011 14:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 14:19:33 GMT]]></title><description><![CDATA[<p>C++Tester schrieb:</p>
<blockquote>
<p>Weil dann die der String wieder größer wird <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>Tja, das ist nun einmal eine Eigenschaft von RLE.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004181</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 08 Jan 2011 14:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 15:57:36 GMT]]></title><description><![CDATA[<p>C++Tester schrieb:</p>
<blockquote>
<p>Hm.. also mit Markerzeichen davor, fände ich sehr unsauber..</p>
</blockquote>
<p>Damit stände dir aber der volle Bereich von char zur Verfügung.</p>
<p>C++Tester schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/903">@Paul</a> Müller<br />
Versteht ich net.. soll ich jetzt anstatt 1,2,3,4,5,6,7,8,9 Steuerzeichen aus der ASCII Tabelle benutzen? Wäre echt super, wenn du mir ien Beispiel geben könntest <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>Die Druckbaren Zeichen beginnen ja nicht gleich am Anfang des ASCII-Tabelle. Und ein Wertebereich von 3 bis 8 wäre ja schon mal eine Maßnahme. Die Idee ist einfach die, Zeichen zu nutzen, die in deiner Zeichenfolge nicht vorkommen.</p>
<p>C++Tester schrieb:</p>
<blockquote>
<p>Falls ihr den Code der Klasse braucht, dann sagt Bescheid (:</p>
</blockquote>
<p>Viel interessanter wäre es, wenn du uns verrätst, was du genau kodieren willst und warum. Vielleicht gibt es noch andere Dinge zu beachten, auf die du selbst nicht kommst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004213</guid><dc:creator><![CDATA[Paul Müller]]></dc:creator><pubDate>Sat, 08 Jan 2011 15:57:36 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 18:01:16 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>C++Tester schrieb:</p>
<blockquote>
<p>Weil dann die der String wieder größer wird <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>Tja, das ist nun einmal eine Eigenschaft von RLE.</p>
</blockquote>
<p>Hehe, das stimmt natürlich, trotzdem kann man <em>versuchen</em> Sie so klein wie möglich zu halten <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/903">@Paul</a> Müller<br />
Okay, also den Zähler (<strong>2</strong>A<strong>4</strong><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> vor Zahlen durch  ,  , , usw.. ersetzen? Okay, dann ändere ich das kurz und melde mich wieder <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>
<p>Der Code ist eig. nur für mich, ich bin gerade dabei C++ zu lernen und dann macht man zwischendurch halt ein paar Projekte um zu sehen was man kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004240</guid><dc:creator><![CDATA[C++Tester]]></dc:creator><pubDate>Sat, 08 Jan 2011 18:01:16 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 18:18:16 GMT]]></title><description><![CDATA[<p>C++Tester schrieb:</p>
<blockquote>
<p>Der Code ist eig. nur für mich</p>
</blockquote>
<p>Dann versuch es gar nicht. Rein theoretisch gibt sich da nichts und es hat den Vorteil, dass du dir die codierte Datei einfach anschauen kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004242</guid><dc:creator><![CDATA[suboptimal]]></dc:creator><pubDate>Sat, 08 Jan 2011 18:18:16 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 18:48:50 GMT]]></title><description><![CDATA[<p>Du kannst den gesamten Text in RLE-Blöcke und nicht RLE-Blöcke aufteilen. Am Anfang gibst du immer die Länge des Blocks an (mit fixer Stellenzahl*), dann ein einzelnes Bit, das angibt, ob der Block als RLE-Block zu verstehen ist oder nicht und dann der Blockinhalt (je nachdem ein einzelnes Zeichen oder x unkodierte Zeichen).</p>
<p>* mit mindestens einem Escapewert, der angibt, dass eine weitere Länge mit größerer (oder gleicher) Stellenanzahl folgt. So könntest du 0-8 als Werte verwenden, 9 als Escapewert, worauf eine zweistellige Länge folgt. Die Länge 20 könnte damit z.B. als 920 kodiert werden (oder auch 911, wenn du nichts vom Wertebereich verschwenden möchtest).</p>
<p><code>AAAAAAAAAAAAGGH!111111</code> wird dann zu <code>9030A41GGH!601</code> .</p>
<p>Sinnvollerweise machst du das binär, dann kannst du in einem Byte 256 statt 10 verschiedene Werte unterbringen. Damit könntest du 0-126 als Werte verwenden, 127 als Escapewert und das restliche Bit als RLE-Marker, was doch weitaus ökonomischer ist.</p>
<p>Das fertige Programm mag keinen wirklichen Nutzen haben, aber wenigstens wirst du hinterher etwas sattelfester in Bitspielereien sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004249</guid><dc:creator><![CDATA[Athar]]></dc:creator><pubDate>Sat, 08 Jan 2011 18:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 18:49:02 GMT]]></title><description><![CDATA[<p>So, fertig, funktioniert, hab jetzt doch die Methode genommen einen Marker Char zu setzen..^^ Wenn eine Zahl im String ist, setze ich \003 davor und bei den Überprüfungen handle ich dann entsprechend.<br />
Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004250</guid><dc:creator><![CDATA[C++Tester]]></dc:creator><pubDate>Sat, 08 Jan 2011 18:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 18:49:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;sstream&gt;

std::string Decode(const std::string&amp; input);
std::string Encode(const std::string&amp; input);

int main()
{
	std::string input = &quot;AAA111B&quot;;

	std::cout &lt;&lt; input &lt;&lt; std::endl;

	std::string res = Encode(input);

	std::cout &lt;&lt; res &lt;&lt; std::endl;

	std::cout &lt;&lt; Decode(res) &lt;&lt; std::endl;

	return 0;
}

std::string Decode(const std::string&amp; input)
{
	std::string result;

	for (size_t i = 0; i &lt; input.length(); ++i)
	{
		if (input[i] == '\1')
		{
			result += input[++i];
		}
		else if (isdigit(input[i]))
		{
			char c = (input[i + 1] == '\1' ? input[i + 2] : input[i + 1]);

			for (size_t j = 1; j &lt; (size_t) input[i] - '0'; ++j)
			{
				result += c;
			}
		}
		else
		{
			result += input[i];
		}
	}

	return result;
}

std::string Encode(const std::string&amp; input)
{
	std::string result;

	int count = 1;

	for (size_t i = 0; i &lt; input.length(); ++i)
	{
		if (input[i + 1] == input[i])
		{
			++count;
		}
		else
		{
			if (count &gt; 2 &amp;&amp; count &lt;= 9)
			{
				result += count + '0';
			}

			if (isdigit(input[i]))
			{
				result += '\1';
			}

			if (count == 2)
			{
				result += input[i];
			}

			result += input[i];

			count = 1;
		}
	}

	return result;
}
</code></pre>
<p>Zahlen werden maskiert. Wie bereits angesprochen bringt das alles aber keinen großen Vorteil. Bei Zahlen wird der Ausgabetext sogar größer, als das Original.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004251</guid><dc:creator><![CDATA[köklökl]]></dc:creator><pubDate>Sat, 08 Jan 2011 18:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to [C++] RLE mit Zahlen on Sat, 08 Jan 2011 18:56:46 GMT]]></title><description><![CDATA[<p>@köklökl<br />
Wie geil, hab das fast haargenau so gemacht wie du <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004253</guid><dc:creator><![CDATA[C++Tester]]></dc:creator><pubDate>Sat, 08 Jan 2011 18:56:46 GMT</pubDate></item></channel></rss>