<?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[Caesar cipher oop]]></title><description><![CDATA[<p>Hallo!</p>
<p><a href="//Caesar.cpp">//Caesar.cpp</a></p>
<pre><code class="language-cpp">#include &quot;Caesar.h&quot;
using namespace std;

string Caesar::code(string text, bool decode)
{
	int off = (decode)? -offset:offset;
	for (unsigned int i = 0; i &lt; text.length(); i++)
	{
		unsigned char c = text[i];
		if (c &gt;= 'A' &amp;&amp; c &lt;= 'Z')
			c = (c - 'A' +26 + off) % 26 + 'Ä';
		else if(c &gt;= 'a' &amp;&amp; c &lt;= 'z')
			text[i] = c;	
	}
	return text;
}
</code></pre>
<p><a href="//Caesar.h">//Caesar.h</a></p>
<pre><code class="language-cpp">#ifndef __Caesar__
#define __Caesar
#include &lt;string&gt;
class Caesar 
{
private:
	int offset;
	std::string code (std::string text, bool decode);
public:
	Caesar() {offset = 3;}
	void setOffset(int n){offset = n;}
	std::string decode (std::string text){return code (text, true);}
	std::string encode (std::string text){return code (text, false);}

};
#endif
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Caesar.h&quot;
using namespace std;
int main ()
{
Caesar cipher;
string abc;
cout &lt;&lt; &quot;Hallo Caesar!&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Wie lautet deine Nachricht: &quot; ;
cin &gt;&gt;abc ;
cipher.decode (abc);
cout &lt;&lt; &quot;decodiert  &quot; &lt;&lt; abc &lt;&lt; endl;
cipher.encode(abc); 
cout &lt;&lt; &quot;codiert  &quot; &lt;&lt; abc &lt;&lt; endl;
cin.get();
system (&quot;pause&quot;);
return 0;
}
</code></pre>
<p>Ausgabe</p>
<pre><code class="language-cpp">Hallo Caesar !
Wie lautet deine nachricht: aAa
decodiert  aAa
codiert  aAa
</code></pre>
<p>wo liegt der fehler?<br />
danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241999/caesar-cipher-oop</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 13:23:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241999.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 May 2009 15:03:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 28 May 2009 15:06:07 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p><a href="//Caesar.cpp">//Caesar.cpp</a></p>
<pre><code class="language-cpp">#include &quot;Caesar.h&quot;
using namespace std;

string Caesar::code(string text, bool decode)
{
	int off = (decode)? -offset:offset;
	for (unsigned int i = 0; i &lt; text.length(); i++)
	{
		unsigned char c = text[i];
		if (c &gt;= 'A' &amp;&amp; c &lt;= 'Z')
			c = (c - 'A' +26 + off) % 26 + 'Ä';
		else if(c &gt;= 'a' &amp;&amp; c &lt;= 'z')
			text[i] = c;	
	}
	return text;
}
</code></pre>
<p><a href="//Caesar.h">//Caesar.h</a></p>
<pre><code class="language-cpp">#ifndef __Caesar__
#define __Caesar
#include &lt;string&gt;
class Caesar 
{
private:
	int offset;
	std::string code (std::string text, bool decode);
public:
	Caesar() {offset = 3;}
	void setOffset(int n){offset = n;}
	std::string decode (std::string text){return code (text, true);}
	std::string encode (std::string text){return code (text, false);}

};
#endif
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Caesar.h&quot;
using namespace std;
int main ()
{
Caesar cipher;
string abc;
cout &lt;&lt; &quot;Hallo Caesar!&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Wie lautet deine Nachricht: &quot; ;
cin &gt;&gt;abc ;
cipher.decode (abc);
cout &lt;&lt; &quot;decodiert  &quot; &lt;&lt; abc &lt;&lt; endl;
cipher.encode(abc); 
cout &lt;&lt; &quot;codiert  &quot; &lt;&lt; abc &lt;&lt; endl;
cin.get();
system (&quot;pause&quot;);
return 0;
}
</code></pre>
<p>Ausgabe</p>
<pre><code class="language-cpp">Hallo Caesar !
Wie lautet deine nachricht: aAa
decodiert  aAa
codiert  aAa
</code></pre>
<p>wo liegt der fehler?<br />
danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717357</guid><dc:creator><![CDATA[pampy]]></dc:creator><pubDate>Thu, 28 May 2009 15:06:07 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 28 May 2009 15:41:22 GMT]]></title><description><![CDATA[<p>pampy schrieb:</p>
<blockquote>
<p>wo liegt der fehler?</p>
</blockquote>
<p>Gibt zwei Möglichkeiten:<br />
1. Du zahlst uns zu wenig, damit wir den Fehler für dich finden.<br />
2. Du verwendest keinen Debugger und suchst ihn selbst.</p>
<p>Ich würde die zweite Möglichkeit empfehlen. Es ist sowieso immer sehr gut, wenn man weiss, wie ein Debugger funktioniert.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717385</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 28 May 2009 15:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 28 May 2009 15:51:27 GMT]]></title><description><![CDATA[<p>danke fuer deine Antwort.<br />
Der Debugger läuft schon ne weile.<br />
Leider auf keinen grünen Zweig gekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717389</guid><dc:creator><![CDATA[pampy]]></dc:creator><pubDate>Thu, 28 May 2009 15:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 28 May 2009 16:37:06 GMT]]></title><description><![CDATA[<p>pampy schrieb:</p>
<blockquote>
<p>Der Debugger läuft schon ne weile.</p>
</blockquote>
<p>Du weisst schon was ein Debugger ist? Das man mit dem Debugger ein Code Schritt für Schritt zur Laufzeit analysieren kann? Und das man nach jedem Schritt den aktuellen Wert der Variablen auslesen kann?<br />
Gerade um Algorithmen zu analysieren und Fehler darin zu finden, ist ein Debugger das absolut beste Mittel.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717414</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 28 May 2009 16:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 28 May 2009 17:54:05 GMT]]></title><description><![CDATA[<p>ich weiß das dass nicht hilft und unangebracht ist...<br />
Ich habe auch schon einen (verbesserten sogar) Ceasar Algorithmus geschrieben.<br />
(es heißt so Monoalphabetische Substitotion), aber ich poste mal den Download.</p>
<p>es ist zwar etwas unelegant und unübersichtlich, aber es funktioniert und könnte dir ja helfen es selbst zu schreiben:</p>
<pre><code>encoder only 1.1.exe 	508.68 KB 	http://ul.to/649fx9
keycreator 1.1.exe 	516.66 KB 	http://ul.to/fwoiyp
decoder 1.0.exe 	520.64 KB 	http://ul.to/uiy0tr
</code></pre>
<p>HIER !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717462</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Thu, 28 May 2009 17:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 28 May 2009 21:03:44 GMT]]></title><description><![CDATA[<p>Sorry, aber was soll er bitte mit dem kompilierten Executables anfangen? Wie die Cäsar-Verschlüsselung funktioniert wird er entweder wissen, oder es leicht auf Wikipedia nachlesen können.</p>
<p>Da ist Reverse-Engineering deiner Programme einfach nur unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717580</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Thu, 28 May 2009 21:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Fri, 29 May 2009 00:37:20 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

class Caesar
{
    private:
        int offset;
    public:
        Caesar() {offset = 3;}
        std::string decode (const std::string &amp;text);
        std::string encode (const std::string &amp;text);
};

std::string Caesar::encode(const std::string &amp;text)
{
    std::string temptext = text;
    int tempascii;
    std::transform(temptext.begin(), temptext.end(), temptext.begin(), toupper);
    for(int i = 0; i &lt; temptext.length(); i++)
    {
        int tempascii = static_cast&lt;int&gt;(temptext[i]) + offset;
        if(tempascii &gt; 90)
        {
            tempascii = 65 + (tempascii - 91);
        }
        temptext[i] = static_cast&lt;char&gt;(tempascii);
    }
    return temptext;
}

std::string Caesar::decode(const std::string &amp;text)
{
    std::string temptext = text;
    int tempascii;
    std::transform(temptext.begin(), temptext.end(), temptext.begin(), toupper);
    for(int i = 0; i &lt; temptext.length(); i++)
    {
        int tempascii = static_cast&lt;int&gt;(temptext[i]) - offset;
        if(tempascii &lt; 65)
        {
            tempascii = 90 + (tempascii - 64);
        }
        temptext[i] = static_cast&lt;char&gt;(tempascii);
    }
    return temptext;
}

int main ()
{
    Caesar cipher;
    std::string abc;
    std::cout &lt;&lt; &quot;Hallo Caesar!&quot; &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;Wie lautet deine Nachricht: &quot; ;
    std::cin &gt;&gt;abc ;
    std::cout &lt;&lt; &quot;codiert  &quot; &lt;&lt; cipher.encode(abc) &lt;&lt; std::endl;
    std::cout &lt;&lt; &quot;decodiert    &quot; &lt;&lt; cipher.decode(abc) &lt;&lt; std::endl;
    std::cin.get();
    system (&quot;pause&quot;);
    return 0;
}
</code></pre>
<p>Da du schon eine Klasse benutzt, rate ich dir auch zu 2 Methoden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1717624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717624</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Fri, 29 May 2009 00:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Fri, 29 May 2009 09:09:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">static_cast&lt;int&gt;(temptext[i])
</code></pre>
<p>???</p>
<pre><code class="language-cpp">tempascii = 65 + (tempascii - 91);
</code></pre>
<p>?????</p>
<p>warum nicht inplace ver- und entschlüsseln?</p>
<pre><code class="language-cpp">std::string Caesar::decode(const std::string &amp;text,int key)
{
    return encode(text,-key);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1717731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1717731</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 29 May 2009 09:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Fri, 29 May 2009 16:23:39 GMT]]></title><description><![CDATA[<p>UUUOOPPPSSS hab ich vergessen ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718042</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 29 May 2009 16:23:39 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Sat, 30 May 2009 09:09:30 GMT]]></title><description><![CDATA[<p>Er will das Caesarverschlüsselungsverfahren benutzen. Also müssen erstmal ALLE Buchstaben groß gesetzt werden.</p>
<p>pampy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">c = (c - 'A' +26 + off) % 26 + 'Ä';
</code></pre>
</blockquote>
<p>Versteh ich nicht, wieso + Ä ? Wenn c == 'C' ist, wäre c laut der ASCII Tabelle 67, A = 65, Ä = 196 und off wäre beim encoden -3.</p>
<p>(67 - 65 + 26 + -3) % 26 + 196 = 221</p>
<p>(67 - 65 + 26 + -3) = 25 da kann man nicht % 26 machen, da es kein Rest geben wird.</p>
<p>Übergebe ich den String nun nochmal und benutze die Decodierung, wird also 221 genutzt. Gleiche Rechung nur mit +3 statt -3. Somit wird dann 224 zurückgegeben, kein gültiger Buchstabe.</p>
<p>pampy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">else if(c &gt;= 'a' &amp;&amp; c &lt;= 'z')
            text[i] = c;
</code></pre>
</blockquote>
<p>Also wenn ich den String übergebe &quot;dzafwef&quot;, wird beim ersten Durchlauf der for-Schleife das d genommen. d ist zwischen a und z, wird angenommen. text[0] = &quot;d&quot;. Durch text[i] = c, c entspricht im ersten Durchlauf &quot;d&quot;, wird text[0] einfach wieder auf d gesetzt? Bei einem String von nur kleinen Buchstaben wird der String also nicht verändert.</p>
<p>Selbst wenn deine Formel stimmen würde, solltest du wissen, dass Caesar nicht solche ASCII Zeichen wie unser Computer hatte. Also wenn du Y nimmst und um 3 Stellen verändern willst, gehst du über Z (1 Stelle verbraucht), musst dann wieder zu A und dann zu B.</p>
<p>Hatte ich nun irgendwas falsch zu bemängeln oder gar falsch gesagt, wird doch bitte konstruktive Kritik geschrieben <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/1718200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718200</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Sat, 30 May 2009 09:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 13:26:29 GMT]]></title><description><![CDATA[<p>habs hinbekommen, danke fuer eure Antworten!</p>
<p>Super Forum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732130</guid><dc:creator><![CDATA[pampy]]></dc:creator><pubDate>Wed, 24 Jun 2009 13:26:29 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 15:57:25 GMT]]></title><description><![CDATA[<p>Also manchmal ist OOP-Fanatismus Nonsens, dies ist ein perfektes Beispiel dafür.</p>
<p>So gehts viel leichter, schlanker und schneller:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

inline char rot13 (char c)
{ return (~c - 1 / (~((c = ~c) | 32) / 13 * 2 - 11) * 13); } 

int main (void)
{
    char buffer[] = &quot;hallo, caeser rocks!&quot;;
    size_t length = strlen (buffer);

    // orginal
    printf (&quot;orginal: %s\n&quot;, buffer);

    // encodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;encoded: %s\n&quot;, buffer);

    // decodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;decoded: %s\n&quot;, buffer);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1732240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732240</guid><dc:creator><![CDATA[unsigned long]]></dc:creator><pubDate>Wed, 24 Jun 2009 15:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 16:24:15 GMT]]></title><description><![CDATA[<p>unsigned long schrieb:</p>
<blockquote>
<p>Also manchmal ist OOP-Fanatismus Nonsens, dies ist ein perfektes Beispiel dafür.</p>
<p>So gehts viel leichter, schlanker und schneller:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

inline char rot13 (char c)
{ return (~c - 1 / (~((c = ~c) | 32) / 13 * 2 - 11) * 13); } 

int main (void)
{
    char buffer[] = &quot;hallo, caeser rocks!&quot;;
    size_t length = strlen (buffer);

    // orginal
    printf (&quot;orginal: %s\n&quot;, buffer);

    // encodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;encoded: %s\n&quot;, buffer);

    // decodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;decoded: %s\n&quot;, buffer);
}
</code></pre>
</blockquote>
<p>Sind dir die Newlines ausgegangen? Hier hast du zwei:</p>
<pre><code>
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1732251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732251</guid><dc:creator><![CDATA[Großzügiger Spender]]></dc:creator><pubDate>Wed, 24 Jun 2009 16:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 16:27:24 GMT]]></title><description><![CDATA[<p>Großzügiger Spender schrieb:</p>
<blockquote>
<p>unsigned long schrieb:</p>
<blockquote>
<p>Also manchmal ist OOP-Fanatismus Nonsens, dies ist ein perfektes Beispiel dafür.</p>
<p>So gehts viel leichter, schlanker und schneller:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

inline char rot13 (char c)
{ return (~c - 1 / (~((c = ~c) | 32) / 13 * 2 - 11) * 13); } 

int main (void)
{
    char buffer[] = &quot;hallo, caeser rocks!&quot;;
    size_t length = strlen (buffer);

    // orginal
    printf (&quot;orginal: %s\n&quot;, buffer);

    // encodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;encoded: %s\n&quot;, buffer);

    // decodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;decoded: %s\n&quot;, buffer);
}
</code></pre>
</blockquote>
<p>Sind dir die Newlines ausgegangen? Hier hast du zwei:</p>
<pre><code>
</code></pre>
</blockquote>
<p>Args Marc++us hat sie geklaut. Hier hast du ein Programm, dass dir bei jedem Aufruf zwei erzeugt, aber verrat es keinem!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
   std::cout &lt;&lt; &quot;\n\n&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1732253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732253</guid><dc:creator><![CDATA[Großzügiger Spender]]></dc:creator><pubDate>Wed, 24 Jun 2009 16:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 16:34:59 GMT]]></title><description><![CDATA[<p>@Großzügiger Spender:<br />
auto equals banane?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732257</guid><dc:creator><![CDATA[Großzügiger Spender Clone]]></dc:creator><pubDate>Wed, 24 Jun 2009 16:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 16:44:10 GMT]]></title><description><![CDATA[<p>unsigned long schrieb:</p>
<blockquote>
<p>Also manchmal ist OOP-Fanatismus Nonsens, dies ist ein perfektes Beispiel dafür.</p>
<p>So gehts viel leichter, schlanker und schneller:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

inline char rot13 (char c)
{ return (~c - 1 / (~((c = ~c) | 32) / 13 * 2 - 11) * 13); } 

int main (void)
{
    char buffer[] = &quot;hallo, caeser rocks!&quot;;
    size_t length = strlen (buffer);

    // orginal
    printf (&quot;orginal: %s\n&quot;, buffer);

    // encodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;encoded: %s\n&quot;, buffer);

    // decodieren
    for (size_t i = 0; i &lt; length; buffer[i] = rot13 (buffer[i]), ++i);
    printf (&quot;decoded: %s\n&quot;, buffer);
}
</code></pre>
</blockquote>
<p>hey mann!111 dat is kein c++ es hat keine classen!!111 java is besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732262</guid><dc:creator><![CDATA[lolwut]]></dc:creator><pubDate>Wed, 24 Jun 2009 16:44:10 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 16:49:14 GMT]]></title><description><![CDATA[<p>Nö F# ist besser <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/1732264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732264</guid><dc:creator><![CDATA[Javerianer]]></dc:creator><pubDate>Wed, 24 Jun 2009 16:49:14 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Wed, 24 Jun 2009 21:50:26 GMT]]></title><description><![CDATA[<p>unsigned long schrieb:</p>
<blockquote>
<p>Also manchmal ist OOP-Fanatismus Nonsens, dies ist ein perfektes Beispiel dafür....</p>
</blockquote>
<p>Habe ich auch sofort gedacht ... schon die Überschrift ist ein Widerspruch in sich.</p>
<p>Was kommt als nächstes: &quot;Freie-Funktionen-Klasse&quot;? <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>Mal im Ernst: Je nachdem, was geübt werden soll:<br />
a) Caesar-Chiffre =&gt; freie Funktion (wenn ich auch unsigned longs obfuscated code nicht als Beispiel nehmen würde)<br />
b) OOP =&gt; Andere Aufgabe.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732433</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 24 Jun 2009 21:50:26 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 01:16:45 GMT]]></title><description><![CDATA[<p>unsigned long schrieb:</p>
<blockquote>
<p>Also manchmal ist OOP-Fanatismus Nonsens, dies ist ein perfektes Beispiel dafür.</p>
<p>So gehts viel leichter, schlanker und schneller:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

inline char rot13 (char c)
{ return (~c - 1 / (~((c = ~c) | 32) / 13 * 2 - 11) * 13); } 

int main (void)
{
    char buffer[] = &quot;hallo, caeser rocks!&quot;;
    size_t length = strlen (buffer);

    // orginal
    printf (&quot;orginal: %s\n&quot;, buffer);

    // encodieren
    for (size_t j = 0; i &lt; length; buffer[j] = rot13 (buffer[j]), ++j);
    printf (&quot;encoded: %s\n&quot;, buffer);

    // decodieren
    for (size_t j = 0; i &lt; length; buffer[j] = rot13 (buffer[j]), ++j);
    printf (&quot;decoded: %s\n&quot;, buffer);
}
</code></pre>
</blockquote>
<p>Wow das Programm funktioniert richtig gut ...<br />
<em>Ironie off</em><br />
Die codierung, sowie die decodierung geht überhaupt nicht! Es soll alles ins große geschrieben und wenn man Y um 3 Stellen nach rechts verschieben soll, muss B als Endergebnis rauskommen.<br />
Das macht dein Programm nicht. Hast du es etwa nicht getestet ?...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732461</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Thu, 25 Jun 2009 01:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 09:54:55 GMT]]></title><description><![CDATA[<p>*hust*</p>
<p>da oben steht &quot;<a href="http://de.wikipedia.org/wiki/Rot13" rel="nofollow">rot13</a>&quot; nicht &quot;rot3&quot;. Der Code sollte nur ein Denkanstoß dafür sein, dass es auch ohne OOP sogar besser (schneller, schlanker - einfach besser) geht.</p>
<p>Noch was in eigener Sache:</p>
<p>Dazu solltest du es unterlassen <strong>verfälschten</strong> Code zu posten. Stichwort Zeile 16 und 20 in deinem Post und meinem Post. Mein Code geht, dein geposteter nicht, da <strong>du</strong> absichtlich &quot;i&quot; und &quot;j&quot; in beiden Zeilen verschoben hast. Daher ist es unterste Schublade hier mit &quot;Ironie&quot; anzutanzen.</p>
<p>Also kusch, kusch, ab in die Ecke und schämen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732565</guid><dc:creator><![CDATA[unsigned long]]></dc:creator><pubDate>Thu, 25 Jun 2009 09:54:55 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 09:57:35 GMT]]></title><description><![CDATA[<p>@unsigned long,<br />
Du hast durchaus zum Teil recht, wenn du das ganze aber doch bitte noch in C++ machen würdest, dann sähe es noch ein wenig besser aus:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;algorithm&gt;

char rot13(char c)
{
	return (~c - 1 / (~((c = ~c) | 32) / 13 * 2 - 11) * 13);
}

int main()
{ 
	std::string buffer = &quot;hallo, caeser rocks!&quot;;

	// originial
	std::cout &lt;&lt; &quot;Original: &quot; &lt;&lt; buffer &lt;&lt; std::endl;

	// encoding
	std::transform(buffer.begin(), buffer.end(), buffer.begin(), &amp;rot13);
	std::cout &lt;&lt; &quot;Encoded:  &quot; &lt;&lt; buffer &lt;&lt; std::endl;

	// decoding 
	std::transform(buffer.begin(), buffer.end(), buffer.begin(), &amp;rot13);
	std::cout &lt;&lt; &quot;Decoded:  &quot; &lt;&lt; buffer &lt;&lt; std::endl;

	return 0;
}
</code></pre>
<p>Wieso sage ich &quot;zum Teil&quot;? Wenn du mal den Code von pampy genauer angeschaut hättest, dann hättest du eine Offset Variable entdeckt. Daher muss hier ein Objekt eingeführt werden.</p>
<p>Allerdings hätte ich es persönlich über einen Funktor gemacht, also sowas:</p>
<pre><code class="language-cpp">// Code von oben, statt der rot13 Funktion, eher sowas:
struct Encoding
{
  int m_offset;

  Encoding(int offset)
    : m_offset(offset)
  {
  }

  char operator ()(char c)
  {
    // ... Kodierung hier hin ... //
  }
}

// In der main dann:
std::transform(buffer.begin(), buffer.end(), buffer.begin(), Encoding(13));

// ...
</code></pre>
<p>Aber ich würde sowas schon eher als fortgeschrittene Programmierung ansehen. Einem Anfänger traue ich jedenfalls so ein Vorgehen nicht einfach so zu. Schon nur wegen der Operatorüberladung.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732583</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 25 Jun 2009 09:57:35 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 11:11:42 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>...Daher muss hier ein Objekt eingeführt werden....</p>
</blockquote>
<p>Naja ... aber nur, wenn man das (schicke und sprechende) transform() nutzen will.<br />
Mit einer simplen handkodierten Schleife hätte es eine einfache Funktion auch getan.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732621</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 25 Jun 2009 11:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 11:48:56 GMT]]></title><description><![CDATA[<p>Das mit der Offset-Variable stimmt, das habe ich überlesen.</p>
<p>Was mir jedoch Kopfzerbrechen bereitet ist hierfür die STL zu benutzen. Keine Frage, STL ist ein feines Teil, aber gerade für sowas denke ich, ist es eher als ob man eine Neutronenbombe auf eine Ameise wirft. Ich denke nicht, das hier die Anwendung der STL irgendeinen Vorteil birgt, eher Abzüge in Performance, Overhead usw. mit sich führt.</p>
<p>Aber da streitet natürlich die Welt drum und einen &quot;C/C++-Mix&quot;- vs. &quot;pure C++&quot;-Flamewar möchte ich sicherlich nicht anzetteln.</p>
<p>Ich hab nur gezeigt wie ich eine einfache Rot13 implementieren würde, ohne viel Schnick Schnack. Natürlich kann man hier auch richtig tiefe Vererbung ansetzen (Klassen für a-/symmetrische Verschlüsselung, Einwegverschlüsselung, usw.), mit Namespaces und co. Aber der Aufwand/Nutzen-Faktor würde meines Erachtens hier nicht sehr berauschend sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732651</guid><dc:creator><![CDATA[unsigned long]]></dc:creator><pubDate>Thu, 25 Jun 2009 11:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 11:57:20 GMT]]></title><description><![CDATA[<p>@unsigned long<br />
Was heisst verfälschten Code?<br />
Zeig mir doch mal bitte wie mein ein Array benutzt wie z.B. &quot;test []&quot; und in dem Index eine Variable angibt, die &quot;i&quot; heisst und gleichzeitig so eine Schrift benutzt &quot;<em>Test</em>&quot; <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Deswegen habe ich &quot;i&quot; durch &quot;j&quot; benutzt, damit ich das benutzen kann...<br />
Und außerdem verändert das wohl nicht das Geringste...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732659</guid><dc:creator><![CDATA[freaky]]></dc:creator><pubDate>Thu, 25 Jun 2009 11:57:20 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 12:47:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for (size_t j = 0; i &lt; length; buffer[j] = rot13 (buffer[j]), ++j);
</code></pre>
<p>Wenn du so einen crap baust, brauchste nicht zu heulen, das nichts läuft.</p>
<p>Der Code von mir funktioniert und das einwandfrei. Aber bitte. Laber du mal ruhig, wir haben hier gerade eine ganz andere Thematik.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732689</guid><dc:creator><![CDATA[unsigned long]]></dc:creator><pubDate>Thu, 25 Jun 2009 12:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Caesar cipher oop on Thu, 25 Jun 2009 13:27:35 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>,<br />
Ich habe noch überlegt, ob ich das &quot;muss&quot; abschwächen sollte. Aber dachte: &quot;Ach dagegen wird sicher niemand einen Einwand haben.&quot;<br />
War wohl falsch gedacht <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="🙂"
    /><br />
Aber recht hast du natürlich schon <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>unsigned long schrieb:</p>
<blockquote>
<p>Was mir jedoch Kopfzerbrechen bereitet ist hierfür die STL zu benutzen. Keine Frage, STL ist ein feines Teil, aber gerade für sowas denke ich, ist es eher als ob man eine Neutronenbombe auf eine Ameise wirft. Ich denke nicht, das hier die Anwendung der STL irgendeinen Vorteil birgt, eher Abzüge in Performance, Overhead usw. mit sich führt.</p>
</blockquote>
<p>Die STL-Algorithmen werden meistens völlig wegoptimiert. Daher ist dein Bedenken hier grundlos. Ein <code>std::transform</code> ist intern auch nichts anderes als eine Schleife. Was man schlussendlich wirklich gewinnt ist Übersicht. Ein <code>std::transform</code> lässt sich deutlich besser lesen als eine <code>for</code> -Schleife.</p>
<p>Was womöglich gewisse Performanceeinbussen bringen könnte, ist die Verwendung des <code>std::string</code> als Puffer. Hier werden sehr wahrscheinlich beim Iterieren zusätzliche Bereichsprüfungen durchgeführt. Aber man kann den <code>std::string</code> natürlich ohne Probleme auch wieder durch deinen <code>char</code> Puffer ersetzen. Die Verwendung von <code>std::transform</code> kann immer noch genutzt werden. Ich könnte mir vorstellen, dass man dann sogar einen Performancegewinn erzielen könnte, da man gleich mit Zeigerarithmetik arbeitet. Allerdings ist das nur eine Spekulation von meiner Seite <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 />
Ich habe einen <code>std::string</code> genutzt, weil ich den Hintergedanken hatte, dass man mit dem String womöglich mehr machen möchte, als nur kodieren und dekodieren. Wahrscheinlich möchte man zuerst etwas vom Benutzer einlesen lassen oder ähnliches und da erleichtert einem die Verwendung des <code>std::string</code> einiges.</p>
<p>Gespräche über die Performance sollte man eigentlich sowieso besser zusammen mit einem Profiler machen. Sonst kann man eigentlich immer nur spekulieren. Allerdings wurde schon mehrmals bewiesen, dass STL Algorithmen nicht langsamer sind als normale eigene Schleifen, bzw. kein Nachteil durch diese entsteht.<br />
Zudem ist Performance ja schön und gut, aber die Übersicht sollte man bei einem Programm auch im Hinterkopf behalten. Optimieren kann man im nachhinein immer noch. Auch sollte man die Programmiersprache, welche man gewählt halt, auch benutzen. Wenn etwas besser in C geschrieben werden sollte, dann kann man natürlich die Programmiersprache wechseln. Aber ein zwanghaftes mischen von C und C++, vor allem an Stellen, wo man gar nicht so recht weiss, ob man etwas durch die Verwendung von C gewinnt, halte ich für ein schlechtes Vorgehen. Sowas führt zu unübersichtlichem und dadurch unwartbarem Code.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1732706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1732706</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 25 Jun 2009 13:27:35 GMT</pubDate></item></channel></rss>