<?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äsar Verschlüsselung mit dynamischer Verschiebung]]></title><description><![CDATA[<p>ja erst mal hallo alle hier , bin neu und hab gerade erst mit dem programieren begonnen das heißt ich mach ein fernstudium .<br />
jetzt hab ich folgendes problem , ich soll ein programm zum verschlüsseln einer nachricht schreiben und der verschiebewert soll dynamisch sein . das erste zeichen soll um eine position verschoben sein , das zweite um zwei usw.<br />
wer kann mir einen tip geben wie ich das mit den positionen regeln kann. die verschlüsselung funktioniert bereits allerdings nur mit einem festen verschiebewert.<br />
besten dank im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307398/cäsar-verschlüsselung-mit-dynamischer-verschiebung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 20:50:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307398.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 25 Aug 2012 21:40:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sat, 25 Aug 2012 21:40:38 GMT]]></title><description><![CDATA[<p>ja erst mal hallo alle hier , bin neu und hab gerade erst mit dem programieren begonnen das heißt ich mach ein fernstudium .<br />
jetzt hab ich folgendes problem , ich soll ein programm zum verschlüsseln einer nachricht schreiben und der verschiebewert soll dynamisch sein . das erste zeichen soll um eine position verschoben sein , das zweite um zwei usw.<br />
wer kann mir einen tip geben wie ich das mit den positionen regeln kann. die verschlüsselung funktioniert bereits allerdings nur mit einem festen verschiebewert.<br />
besten dank im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245494</guid><dc:creator><![CDATA[joergi_1]]></dc:creator><pubDate>Sat, 25 Aug 2012 21:40:38 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sat, 25 Aug 2012 21:46:51 GMT]]></title><description><![CDATA[<p>Na, mit einer einfachen Schleife:</p>
<pre><code class="language-cpp">std::string str(&quot;Hallo Welt!&quot;);
for(size_t ct(0);ct &lt; str.length();++ct)
    str[ct] += circular_shift(ct);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2245495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245495</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 25 Aug 2012 21:46:51 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 06:37:40 GMT]]></title><description><![CDATA[<p>hallo sone ,</p>
<p>erst mal danke für deine schnelle antwort , aber leider kann ich die befehle die du schreibst nicht verstehen .<br />
ich hab mal mein prg. hier vielleicht kannst du mir sagen wies weiter geht so das auch ich das versteh.</p>
<p>#include &lt;iostream&gt;</p>
<p>using namespace std;</p>
<p>void caesar();</p>
<p>void caesar (string kette){</p>
<p>int laenge , verschiebung ;<br />
laenge = kette.length();</p>
<p>cout&lt;&lt;&quot; verschiebewert eingeben: &quot;;<br />
cin&gt;&gt;verschiebung;<br />
for (int zaehler=0;zaehler&lt;laenge;zaehler++)<br />
{<br />
cout&lt;&lt;static_cast&lt;char&gt;(kette[zaehler]+ verschiebung);<br />
cout&lt;&lt;endl&lt;&lt;endl;<br />
}</p>
<p>}</p>
<p>int main()<br />
{<br />
string eingabe;<br />
cout&lt;&lt;&quot;geben sie ein Wort ein das sie verschluesseln moechten: &quot;;<br />
cin&gt;&gt;eingabe;<br />
cout&lt;&lt;&quot;sie haben: &quot;&lt;&lt;eingabe&lt;&lt;&quot; eingegeben&quot;&lt;&lt;endl;</p>
<p>caesar (eingabe);<br />
return 0;<br />
}</p>
<p>wie gesagt ich bin absoluter anfänger , ich hab auch an eine schleife gedacht aber ich kapier irgendwie das mit der dynamic nicht . obiges prg. funktioniert eben nur mit der festen verschiebung<br />
danke joergi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245522</guid><dc:creator><![CDATA[joergi_1]]></dc:creator><pubDate>Sun, 26 Aug 2012 06:37:40 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 08:29:03 GMT]]></title><description><![CDATA[<p>joergi_1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;
</code></pre>
</blockquote>
<p>Hier fehlt noch ein #include &lt;string&gt;</p>
<p>joergi_1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">using namespace std;

void caesar();

void caesar (string kette){

int laenge , verschiebung ;
laenge = kette.length();
</code></pre>
</blockquote>
<p>Vermeide getrenntes Definieren und Initialisieren.</p>
<pre><code class="language-cpp">int laenge = kette.size(); // tut's auch
</code></pre>
<p>joergi_1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cout&lt;&lt;&quot; verschiebewert eingeben: &quot;;
cin&gt;&gt;verschiebung;
for (int zaehler=0;zaehler&lt;laenge;zaehler++)
{
    cout&lt;&lt;static_cast&lt;char&gt;(kette[zaehler]+ verschiebung);
    cout&lt;&lt;endl&lt;&lt;endl;
}
</code></pre>
</blockquote>
<p>Wenn ich das richtig verstanden habe, soll dein Programm gar nicht nach der verschiebung fragen sondern als Verschiebung zaehler+1 verwenden. Du solltest das vielleicht auch die Ausgabe weglassen und stattdessen das verschlüsselte Wort zurück geben (per return und entsprechendem Rückgabetyp, also string statt void).</p>
<p>joergi_1 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">}

int main()
{
    string eingabe;
cout&lt;&lt;&quot;geben sie ein Wort ein das sie verschluesseln moechten: &quot;;
cin&gt;&gt;eingabe;
cout&lt;&lt;&quot;sie haben: &quot;&lt;&lt;eingabe&lt;&lt;&quot; eingegeben&quot;&lt;&lt;endl;

caesar (eingabe);
    return 0;
}
</code></pre>
<p>wie gesagt ich bin absoluter anfänger , ich hab auch an eine schleife gedacht aber ich kapier irgendwie das mit der dynamic nicht . obiges prg. funktioniert eben nur mit der festen verschiebung<br />
danke joergi</p>
</blockquote>
<p>Das &quot;dynamisch&quot; soll einfach nur heißen, dass nicht für jedes Zeichen des Wortes dieselbe Verschiebung benutzt wird. Die Verschiebung soll also von zaehler abhängig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245536</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 26 Aug 2012 08:29:03 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 14:21:39 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Na, mit einer einfachen Schleife: [...]</p>
</blockquote>
<p>Schleifen? Pfff...</p>
<pre><code class="language-cpp">#include &lt;cctype&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

class caesar_t
{
    private:
        int const static alphabet_length = 'z' - 'a' + 1;
        int key, const delta;

        caesar_t( int const key, bool const decrypt = false ) : key( decrypt ? -key : key ), delta( decrypt ? -1 : 1 ) { }

    public:
        static std::string caesar( std::string const &amp;plaintext, int const key, bool const decrypt = false ) 
        {
            std::string result;
            std::transform( plaintext.begin(), plaintext.end(), std::back_inserter( result ), caesar_t( key, decrypt ) );
            return result;
        }

        std::string::value_type operator() ( std::string::value_type ch )
        {
            ch = std::isalpha( ch ) ? ( std::isupper( ch ) ? 'A' : 'a' ) + ( std::toupper( ch ) + key ) % alphabet_length : ch;
            key = key % alphabet_length || !key ? key + delta : 0;
            return ch;
        }
};

int main()
{
    std::string text = &quot;Foooooohoooobaaahaarrrr&quot;;
    std::cout &lt;&lt; &quot;Encrypted: &quot; &lt;&lt; ( text = caesar_t::caesar( text, 2 ) ) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;Decrypted: &quot; &lt;&lt; caesar_t::caesar( text, 2, true ) &lt;&lt; '\n';
}
</code></pre>
<p><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>// edit: eloganter<br />
// edihit: kaufe noch ein <code>const</code> ...<br />
// edihihihididit: und noch ein paar...<br />
// edihihihihihidihit: <code>linecount -= 4</code><br />
// edihihihihihidihihit: <code>variablecount -= 1</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245589</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 26 Aug 2012 14:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 11:27:25 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Na, mit einer einfachen Schleife: [...]</p>
</blockquote>
<p>Schleifen? Pfff...</p>
<pre><code class="language-cpp">std::transform( plaintext.begin(), plaintext.end(), std::back_inserter( encrypted ), caesar_t( key, decrypt ) );
</code></pre>
</blockquote>
<p>Hahaha, *LOL*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245595</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 26 Aug 2012 11:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 14:37:09 GMT]]></title><description><![CDATA[<p>Ok, der Kürze wegen ...</p>
<pre><code class="language-cpp">#include &lt;cctype&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

std::string caesar( std::string &amp;str, int key, bool const decrypt = false ) 
{
	int const delta = decrypt ? -1 : 1;
	key = delta * key;

	for( std::string::iterator i = str.begin(); i != str.end(); ++i, key = key % ( 'z' - 'a' + 1 ) || !key ? key + delta : 0 )
	    *i = std::isalpha( *i ) ? ( std::isupper( *i ) ? 'A' : 'a' ) + ( std::toupper( *i ) + key ) % ( 'z' - 'a' + 1 ) : *i;

	return str;
}

int main()
{
    std::string text = &quot;Foooooohoooobaaahaarrrr&quot;;
    std::cout &lt;&lt; &quot;Encrypted: &quot; &lt;&lt; caesar( text, 2 ) &lt;&lt; '\n';
    std::cout &lt;&lt; &quot;Decrypted: &quot; &lt;&lt; caesar( text, 2, true ) &lt;&lt; '\n';
}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245633</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 26 Aug 2012 14:37:09 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 15:53:12 GMT]]></title><description><![CDATA[<p>Und weil mir grad so lw. war...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
using namespace std;
class CesarChar
{
    char _char;
    bool CharIsLetter() const
    {
        return (_char &gt;= 65 &amp;&amp; _char &lt;= 90) || (_char &gt;= 97 &amp;&amp; _char &lt;= 122);
    }
    public:

        CesarChar(char ch = ' ') : _char(ch){}
        CesarChar operator+(unsigned amount) const
        {
            amount %= 26;
            CesarChar temp(*this);
            for (unsigned i = 0; i&lt;amount; ++i)
                ++temp;
            return temp;
        }
        CesarChar operator-(unsigned amount) const
        {
            amount %= 26;
            CesarChar temp(*this);
            for (unsigned i = 0; i&lt;amount; ++i)
                --temp;
            return temp;
        }
        CesarChar operator-=(unsigned amount)
        {
            amount %= 26;
            *this = *this-amount;
            return *this;
        }
        CesarChar operator+=(unsigned amount)
        {
            amount %= 26;
            *this = *this+amount;
            return *this;
        }
        CesarChar operator++()
        {
            if (!CharIsLetter())
                return *this;
            switch (_char)
            {
                case 'z':
                    _char = 'a';
                    break;
                case 'Z':
                    _char = 'A';
                    break;
                default:
                    ++_char;
                    break;
            }
            return *this;
        }
        CesarChar operator--()
        {
            if (!CharIsLetter())
                return *this;
            switch (_char)
            {
                case 'a':
                    _char = 'z';
                    break;
                case 'A':
                    _char = 'z';
                    break;
                default:
                    --_char;
                    break;
            }
            return *this;
        }
        char ch() const {return _char;}
};

class CesarString
{
    vector&lt;CesarChar&gt; _string;
    vector&lt;unsigned&gt; _amounts;
    public:
        CesarString(string str = &quot; &quot;) : _string(str.begin(), str.end()){}

        void crypt(unsigned amount)
        {
            for (vector&lt;CesarChar&gt;::iterator it = _string.begin(); it != _string.end(); ++it)
                (*it) += amount;
            _amounts.push_back(amount);
        }

        void decrypt()
        {
            for (vector&lt;unsigned&gt;::iterator it = _amounts.end()-1; it != _amounts.begin()-1; --it)
            {
                for (vector&lt;CesarChar&gt;::iterator jt = _string.begin(); jt != _string.end(); ++jt)
                    *jt -= *it;
                _amounts.pop_back();
            }
        }
        void print()
        {
            for (vector&lt;CesarChar&gt;::iterator it = _string.begin(); it != _string.end(); ++it)
                std::cout &lt;&lt; it-&gt;ch();
            cout &lt;&lt; '\n';
        }
};

int main()
{
    CesarString str(&quot;test123&quot;);

    str.print();
    str.crypt(20);
    str.print();
    str.crypt(28);
    str.print();
    str.decrypt();
    str.print();
}
</code></pre>
<p>... und kritisiert nicht meinen Stil, hab ich jetzt nur so aus langeweile hingeklatscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245655</guid><dc:creator><![CDATA[Ich bin Matrix...]]></dc:creator><pubDate>Sun, 26 Aug 2012 15:53:12 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 16:06:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">CesarChar operator+(unsigned amount) const 
        { 
            amount %= 26; 
            CesarChar temp(*this); 
            for (unsigned i = 0; i&lt;amount; ++i) 
                ++temp; 
            return temp; 
        } 
        CesarChar operator-(unsigned amount) const 
        { 
            amount %= 26; 
            CesarChar temp(*this); 
            for (unsigned i = 0; i&lt;amount; ++i) 
                --temp; 
            return temp; 
        }
</code></pre>
<p>Lol. Machen die Funktionen abgesehen vom De/In-krement nicht genau dasselbe?<br />
Das kann man doch wenigstens in eine <code>_impl</code> Funktion auslagern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245663</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 26 Aug 2012 16:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 16:08:31 GMT]]></title><description><![CDATA[<p>Ich bin Matrix... schrieb:</p>
<blockquote>
<p>... und kritisiert nicht meinen Stil, hab ich jetzt nur so aus langeweile hingeklatscht.</p>
</blockquote>
<pre><code class="language-cpp">for (vector&lt;unsigned&gt;::iterator it = _amounts.end()-1; it != _amounts.begin()-1; --it)
</code></pre>
<p>Das ist allerdings keine Stilfrage, sondern Unfug.<br />
Da in einer vorwärtslaufenden Schleife der Itertaor jeweils unmittelbar vor dem Test auf Schleifenende inkrementiert wird, muss logischerweise in einer entsprechend rückwärts laufenden Schleife der Iterator unmittelbar nach dem Vergleich dekrementiert werden. Abgesehen davon, wird dein Iterator durch das pop_bck ungültig.</p>
<pre><code class="language-cpp">for ( ; !_amounts.empty(); )
            {
                for (vector&lt;CesarChar&gt;::iterator jt = _string.begin(); jt != _string.end(); ++jt)
                    *jt -= _amounts.back();
                _amounts.pop_back();
            }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2245665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245665</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 26 Aug 2012 16:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 16:10:53 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Ich bin Matrix... schrieb:</p>
<blockquote>
<p>... und kritisiert nicht meinen Stil, hab ich jetzt nur so aus langeweile hingeklatscht.</p>
</blockquote>
<pre><code class="language-cpp">for (vector&lt;unsigned&gt;::iterator it = _amounts.end()-1; it != _amounts.begin()-1; --it)
</code></pre>
<p>Das ist allerdings keine Stilfrage, sondern Unfug.</p>
</blockquote>
<p>Ohne irgendwie drauf zu schauen, würd ich sagen, dass geht mit <code>reverse_iterator</code> en besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245666</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 26 Aug 2012 16:10:53 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Sun, 26 Aug 2012 16:24:45 GMT]]></title><description><![CDATA[<blockquote>
<p>Ohne irgendwie drauf zu schauen, würd ich sagen, dass geht mit reverse_iteratoren besser.</p>
</blockquote>
<p>Ist mir schon klar, aber wie gesagt, ist aus reiner langeweile entstanden und da ich mich mit reverse_iterator noch nicht eingehend beschäftigt habe und kb hatte mit vollem Traffic zu googlen hab ichs gelassen^^</p>
<blockquote>
<p>Abgesehen davon, wird dein Iterator durch das pop_bck ungültig.</p>
</blockquote>
<p>... und wird direkt danach dekrementiert bzw. beim Ende der Schleife verworfen. Wo liegt da das Problem?</p>
<blockquote>
<p>Das ist allerdings keine Stilfrage, sondern Unfug.<br />
Da in einer vorwärtslaufenden Schleife der Itertaor jeweils unmittelbar vor dem Test auf Schleifenende inkrementiert wird, muss logischerweise in einer entsprechend rückwärts laufenden Schleife der Iterator unmittelbar nach dem Vergleich dekrementiert werden.</p>
</blockquote>
<p>Ja, jetzt wo ich nochmal draufguck, seh ich, das ist Unfug. Was solls, ich glaube keine der hier angebotenen Lösungsmöglichkeiten hat der TE verstanden.</p>
<blockquote>
<p>wie gesagt ich bin absoluter anfänger</p>
</blockquote>
<p>... weshalb er wohl nichtmal mit dem Begriff Standard-Bibliothek was anfangen können wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245672</guid><dc:creator><![CDATA[Ich bin Matrix...]]></dc:creator><pubDate>Sun, 26 Aug 2012 16:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to Cäsar Verschlüsselung mit dynamischer Verschiebung on Mon, 27 Aug 2012 07:49:47 GMT]]></title><description><![CDATA[<p>@krümmelkacker,</p>
<p>das mit der dynamic hast du richtig verstanden ,<br />
hab das programm jetzt am laufen .<br />
vielen dank an alle mfg joergi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2245832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2245832</guid><dc:creator><![CDATA[joergi_1]]></dc:creator><pubDate>Mon, 27 Aug 2012 07:49:47 GMT</pubDate></item></channel></rss>