<?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[Kleines Progrämmchen, was sagt ihr dazu?]]></title><description><![CDATA[<p>Ich stell euch mal mein erstes, eigenes C++ Programm hier rein und würde<br />
mich über ein bisschen konstruktive Kritik freuen <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>
<pre><code>/*
Programm zur Verschlüsselung von (Text-)Dateien mit Hilfe 
eines symmetrischen Schlüssels. (Entschlüsselung entspricht der
erneuten Verschlüsselung der Zieldatei mit selbem Schlüssel)
Grobe Programmstruktur:

	*Fragt nach Ziel und Quelldatei
	*Initialisiert die entsprechenden Ströme
	*Fragt nach dem Schluessel
	*Initialisiert den Schluessel
	*Führt die Verschlüsselung aus

Auf geht's!
*/

#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

#define MAX_PUFFER 50
#define MAX_SCHLUESSEL 50

using namespace std;

//***************Globale Variablen*******************

//Quelle und Ziel
string sQuelle;  // Adresse der Quelldatei
string sZiel;	 // Adresse der Zieldatei

//Der Schluessel
string sSchluessel;
string::iterator itAnfang;   //zeigt auf erstes Zeichen von Schluessel
string::iterator itEnde;	 //zeigt auf letztes Zeichen von Schluessel	
string::iterator itGerade;	 //zeigt auf das gerade zu nutzende Zeichen

//Zwischenpuffer
char cPuffer[MAX_PUFFER];

//Ströme
ifstream ifQuelle;
ofstream ofZiel;

//*****************Funktionen**********************

string holeQuelle(); //erfragt die Adresse der Quelldatei, gibt Adresse dann wieder

string holeZiel();	 //erfragt die Adresse der Zieldatei, gibt Adresse dann wieder

bool initStroeme(string quelle, string ziel);	 //Initialisiert die Datenströme. Gibt bei Erfolg true wieder

string holeSchluessel(); //erfragt den Schluessel, gibt diesen dann wieder.	

bool initSchluessel(string pSchluessel);	//Initialisiert den Schluessel, gibt bei Erfolg true wieder

bool verschluessele();	//Verschluesselt die Dateien, gibt bei Erfolg true wieder

void iteratorErhoehen();//setzt itGerade auf das nächste Zeichen;

int main(int argc, char *argv[])
{
	//Erfrage die Dateien und Initialisiere die Ströme
	if(initStroeme(holeQuelle(),holeZiel()))
		cout &lt;&lt; &quot;*Ströme initialisiert!*\n&quot;;

	//Erfrage und Initialisiere Schluessel
	if(initSchluessel(holeSchluessel()))
		cout &lt;&lt; &quot;*Schluessel erfolgreich initialisiert!*\n&quot;;

	//verschluessele die Datei		
	if(verschluessele())
		cout &lt;&lt; &quot;*Dateien erfolgreich verschlüsselt!*\n&quot; 
			 &lt;&lt; &quot;Der Schlüssel lautete: &quot; &lt;&lt; sSchluessel &lt;&lt; endl;

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}

string holeQuelle()
{
	string temp;
	cout &lt;&lt; &quot;Geben sie die Adresse der Quelldatei ein.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Beispiel: c:\\\\Dateien\\\\quelle.txt&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Ihre Eingabe: &quot;;
	cin &gt;&gt; temp;
	cout &lt;&lt; endl;
	return temp;
}

string holeZiel()
{
	string temp;
	cout &lt;&lt; &quot;Geben sie die Adresse der Zieldatei ein.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Beispiel: c:\\\\Dateien\\\\ziel.txt&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Ihre Eingabe: &quot;;
	cin &gt;&gt; temp;
	cout &lt;&lt; endl;
	return temp;
}

bool initStroeme(string quelle, string ziel)
{
	//initialisiere Lesestrom
	ifQuelle.open((quelle.c_str()), ios_base::binary); //quelle.c_str wandelt quelle zu C-String
	if(!ifQuelle) //Wenn Fehler im Strom vorliegt, gibt er false aus.
		return false;

	//initialisiere Ausgabestrom
	ofZiel.open((ziel.c_str()), ios_base::binary/*|ios_base::trunc|ios_base::app*/);
	if(!ofZiel)
		return false; // siehe oben
	return true;
}

string holeSchluessel()
{
	string temp;
	cout &lt;&lt; &quot;Bitte geben sie den Schlüssel zum (de)kodieren der Datei ein: \n&quot;;
	cin &gt;&gt; temp;
	if(temp.size()&gt;MAX_SCHLUESSEL) //prüft Schlüsselgröße und fragt - falls nötig -
	{						   	   //erneut nach, bis der Schlüssel stimmt.
		cout &lt;&lt; &quot;Schlüssel zu groß!\n&quot;;
		return holeSchluessel();
	}
	return temp;
}

bool initSchluessel(string pSchluessel)
{
	sSchluessel = pSchluessel; 
	itAnfang = sSchluessel.begin();
	itEnde = sSchluessel.end();
	itGerade = sSchluessel.begin();
	return true;
}

//Verschluesselt mit Hilfe symetrischen Schlüssels:
//	*füllt den Puffer
//	*XOR Operation der einzelnen Charzeichen im Puffer/Schlüssel
//	*schreibt den Puffer in sZiel
//  *solange bis Datei komplett gelesen

bool verschluessele()
{	

	//Endlosschleife
	while(!ifQuelle.eof())
	{

		//den Puffer füllen
		int PufferStand = 1;
		cPuffer[0] = ifQuelle.get();
		while((!ifQuelle.eof()) &amp;&amp; (PufferStand&lt;MAX_PUFFER))
		{
			cPuffer[PufferStand] = ifQuelle.get();
			++PufferStand;
		}	

		//XOR Operation	
		for(int i =0; i&lt;PufferStand; ++i)
		{
			cPuffer[i] = cPuffer[i]^(*itGerade);
			iteratorErhoehen();
		}

		//Puffer ins Ziel übertragen
		for(int i=0; i&lt;=(PufferStand-1); ++i)
			{
				ofZiel &lt;&lt; cPuffer[i];
		}
	}

	return true;			

}		

void iteratorErhoehen()
{
	if(itGerade!=(itEnde-1))
		++itGerade;
	if(itGerade==(itEnde-1))
		itGerade = itAnfang;
}
</code></pre>
<p>Das es noch nicht wirklich objektorientiert ist, ist mir irgendwann dann auch<br />
aufgefallen.</p>
<p>Panke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/123229/kleines-progrämmchen-was-sagt-ihr-dazu</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 14:02:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123229.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Oct 2005 08:17:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 08:17:34 GMT]]></title><description><![CDATA[<p>Ich stell euch mal mein erstes, eigenes C++ Programm hier rein und würde<br />
mich über ein bisschen konstruktive Kritik freuen <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>
<pre><code>/*
Programm zur Verschlüsselung von (Text-)Dateien mit Hilfe 
eines symmetrischen Schlüssels. (Entschlüsselung entspricht der
erneuten Verschlüsselung der Zieldatei mit selbem Schlüssel)
Grobe Programmstruktur:

	*Fragt nach Ziel und Quelldatei
	*Initialisiert die entsprechenden Ströme
	*Fragt nach dem Schluessel
	*Initialisiert den Schluessel
	*Führt die Verschlüsselung aus

Auf geht's!
*/

#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

#define MAX_PUFFER 50
#define MAX_SCHLUESSEL 50

using namespace std;

//***************Globale Variablen*******************

//Quelle und Ziel
string sQuelle;  // Adresse der Quelldatei
string sZiel;	 // Adresse der Zieldatei

//Der Schluessel
string sSchluessel;
string::iterator itAnfang;   //zeigt auf erstes Zeichen von Schluessel
string::iterator itEnde;	 //zeigt auf letztes Zeichen von Schluessel	
string::iterator itGerade;	 //zeigt auf das gerade zu nutzende Zeichen

//Zwischenpuffer
char cPuffer[MAX_PUFFER];

//Ströme
ifstream ifQuelle;
ofstream ofZiel;

//*****************Funktionen**********************

string holeQuelle(); //erfragt die Adresse der Quelldatei, gibt Adresse dann wieder

string holeZiel();	 //erfragt die Adresse der Zieldatei, gibt Adresse dann wieder

bool initStroeme(string quelle, string ziel);	 //Initialisiert die Datenströme. Gibt bei Erfolg true wieder

string holeSchluessel(); //erfragt den Schluessel, gibt diesen dann wieder.	

bool initSchluessel(string pSchluessel);	//Initialisiert den Schluessel, gibt bei Erfolg true wieder

bool verschluessele();	//Verschluesselt die Dateien, gibt bei Erfolg true wieder

void iteratorErhoehen();//setzt itGerade auf das nächste Zeichen;

int main(int argc, char *argv[])
{
	//Erfrage die Dateien und Initialisiere die Ströme
	if(initStroeme(holeQuelle(),holeZiel()))
		cout &lt;&lt; &quot;*Ströme initialisiert!*\n&quot;;

	//Erfrage und Initialisiere Schluessel
	if(initSchluessel(holeSchluessel()))
		cout &lt;&lt; &quot;*Schluessel erfolgreich initialisiert!*\n&quot;;

	//verschluessele die Datei		
	if(verschluessele())
		cout &lt;&lt; &quot;*Dateien erfolgreich verschlüsselt!*\n&quot; 
			 &lt;&lt; &quot;Der Schlüssel lautete: &quot; &lt;&lt; sSchluessel &lt;&lt; endl;

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}

string holeQuelle()
{
	string temp;
	cout &lt;&lt; &quot;Geben sie die Adresse der Quelldatei ein.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Beispiel: c:\\\\Dateien\\\\quelle.txt&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Ihre Eingabe: &quot;;
	cin &gt;&gt; temp;
	cout &lt;&lt; endl;
	return temp;
}

string holeZiel()
{
	string temp;
	cout &lt;&lt; &quot;Geben sie die Adresse der Zieldatei ein.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Beispiel: c:\\\\Dateien\\\\ziel.txt&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Ihre Eingabe: &quot;;
	cin &gt;&gt; temp;
	cout &lt;&lt; endl;
	return temp;
}

bool initStroeme(string quelle, string ziel)
{
	//initialisiere Lesestrom
	ifQuelle.open((quelle.c_str()), ios_base::binary); //quelle.c_str wandelt quelle zu C-String
	if(!ifQuelle) //Wenn Fehler im Strom vorliegt, gibt er false aus.
		return false;

	//initialisiere Ausgabestrom
	ofZiel.open((ziel.c_str()), ios_base::binary/*|ios_base::trunc|ios_base::app*/);
	if(!ofZiel)
		return false; // siehe oben
	return true;
}

string holeSchluessel()
{
	string temp;
	cout &lt;&lt; &quot;Bitte geben sie den Schlüssel zum (de)kodieren der Datei ein: \n&quot;;
	cin &gt;&gt; temp;
	if(temp.size()&gt;MAX_SCHLUESSEL) //prüft Schlüsselgröße und fragt - falls nötig -
	{						   	   //erneut nach, bis der Schlüssel stimmt.
		cout &lt;&lt; &quot;Schlüssel zu groß!\n&quot;;
		return holeSchluessel();
	}
	return temp;
}

bool initSchluessel(string pSchluessel)
{
	sSchluessel = pSchluessel; 
	itAnfang = sSchluessel.begin();
	itEnde = sSchluessel.end();
	itGerade = sSchluessel.begin();
	return true;
}

//Verschluesselt mit Hilfe symetrischen Schlüssels:
//	*füllt den Puffer
//	*XOR Operation der einzelnen Charzeichen im Puffer/Schlüssel
//	*schreibt den Puffer in sZiel
//  *solange bis Datei komplett gelesen

bool verschluessele()
{	

	//Endlosschleife
	while(!ifQuelle.eof())
	{

		//den Puffer füllen
		int PufferStand = 1;
		cPuffer[0] = ifQuelle.get();
		while((!ifQuelle.eof()) &amp;&amp; (PufferStand&lt;MAX_PUFFER))
		{
			cPuffer[PufferStand] = ifQuelle.get();
			++PufferStand;
		}	

		//XOR Operation	
		for(int i =0; i&lt;PufferStand; ++i)
		{
			cPuffer[i] = cPuffer[i]^(*itGerade);
			iteratorErhoehen();
		}

		//Puffer ins Ziel übertragen
		for(int i=0; i&lt;=(PufferStand-1); ++i)
			{
				ofZiel &lt;&lt; cPuffer[i];
		}
	}

	return true;			

}		

void iteratorErhoehen()
{
	if(itGerade!=(itEnde-1))
		++itGerade;
	if(itGerade==(itEnde-1))
		itGerade = itAnfang;
}
</code></pre>
<p>Das es noch nicht wirklich objektorientiert ist, ist mir irgendwann dann auch<br />
aufgefallen.</p>
<p>Panke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892049</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Fri, 14 Oct 2005 08:17:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 09:15:57 GMT]]></title><description><![CDATA[<p>Sieht doch für einen Anfänger gar nicht so schlecht aus, aber:</p>
<p>* holeSchlüssel() würde ich eher mit einer while-Schleife lösen:</p>
<pre><code class="language-cpp">string holeSchluessel()
{
    string temp;
    do
    {
        cout &lt;&lt; &quot;Bitte geben sie den Schlüssel zum (de)kodieren der Datei ein: \n&quot;;
        cin &gt;&gt; temp;
        if(temp.size()&gt;MAX_SCHLUESSEL) //prüft Schlüsselgröße und fragt - falls nötig -
        {                                  //erneut nach, bis der Schlüssel stimmt.
            cout &lt;&lt; &quot;Schlüssel zu groß!\n&quot;;
        }
    while(temp.size()&gt;MAX_SCHLUESSEL);
    return temp;
}
</code></pre>
<p>* iteratorErhöhen() schreit geradezu nach einem else (anstelle des zweiten if(...) )</p>
<p>* da du schon mit Strings arbeitest, kannst du doch auch von deren Speicherverwaltung profitieren - dann benötigst du auch die MAX.. Makros (in C++ sind übrigens &quot;const int&quot; üblicher) nicht mehr.</p>
<p>Den Kern-Algorithmus habe ich mir jetzt nicht genauer angesehen, aber er scheint OK zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892105</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Fri, 14 Oct 2005 09:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 12:51:45 GMT]]></title><description><![CDATA[<p>Ich wette du hast schon mehrere programme 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="😉"
    /> da ich selber noch anfänger bin wette ich das du schon andere testprogramme geschrieben hast.<br />
Wenn das aber wirklich dein erstes ist dann respeckt <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/892312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892312</guid><dc:creator><![CDATA[MartinMilbret]]></dc:creator><pubDate>Fri, 14 Oct 2005 12:51:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 13:36:57 GMT]]></title><description><![CDATA[<p>versuch mal, das programm so klein wie möglich zu kriegen. keine fehlerbehandlung. keine globalen variablen. ich fürchte, es wird hübscher als 6-zeiler aussehen. falls nicht, dann sollte dir kurze version trotzdem in mancherlei hinsicht vorbild sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892364</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 14 Oct 2005 13:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 13:50:47 GMT]]></title><description><![CDATA[<p>wenn du schon globale variablen hast, dann tue sie mindestens in einen anonymen namespace. alles andere was mir auf den ersten blick aufgefallen ist, wurde schon gesagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892375</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Fri, 14 Oct 2005 13:50:47 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 15:48:09 GMT]]></title><description><![CDATA[<p>Das erste das funktioniert und nicht aus irgendwelches Tuts ist.<br />
Ich mach mich dann mal ans Kleinschreiben. Aber 6 Zeilen? Ob das geht ..</p>
<p>Welchen Vorteil bringt ein anonymer Namespace?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892473</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892473</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Fri, 14 Oct 2005 15:48:09 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 20:40:58 GMT]]></title><description><![CDATA[<p>Panke schrieb:</p>
<blockquote>
<p>Welchen Vorteil bringt ein anonymer Namespace?</p>
</blockquote>
<p>Objekte, die sich in einem anonymen Namespace befinden, haben internes Linkage. D.h. dass sie nur von der Übersetzungseinheit angesprochen werden kann, die den Namespace definiert.<br />
Der anonyme Namespace hat den Vorteil, dass obwohl du innerhalb der ÜE ohne Qualifizierung auf Objekte, etc. in diesem Namensraum zugreifen kannst, diese von anderen ÜEs nicht angesprochen werden können.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892633</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Fri, 14 Oct 2005 20:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Fri, 14 Oct 2005 20:47:06 GMT]]></title><description><![CDATA[<p>Panke schrieb:</p>
<blockquote>
<p>Das erste das funktioniert und nicht aus irgendwelches Tuts ist.<br />
Ich mach mich dann mal ans Kleinschreiben. Aber 6 Zeilen? Ob das geht ..</p>
</blockquote>
<p>aber mach nicht den quelltext klein sondern sieh zu dass das was der compiler ausspuckt klein ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892637</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 14 Oct 2005 20:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 09:31:22 GMT]]></title><description><![CDATA[<p>Hey Panke du bist ein Genie. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <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/892727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892727</guid><dc:creator><![CDATA[wtf]]></dc:creator><pubDate>Sat, 15 Oct 2005 09:31:22 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 14:20:06 GMT]]></title><description><![CDATA[<p>Panke schrieb:</p>
<blockquote>
<p>Das erste das funktioniert und nicht aus irgendwelches Tuts ist.<br />
Ich mach mich dann mal ans Kleinschreiben. Aber 6 Zeilen? Ob das geht ..</p>
<p>Welchen Vorteil bringt ein anonymer Namespace?</p>
</blockquote>
<p>6 Zeilen find ich auch schwierig, ohne jeglichen Stil aufzugeben. Aber ohne Fehlerabfragen komm ich auf 8 Zeilen mit allem drum und dran <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/892868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892868</guid><dc:creator><![CDATA[Taurin]]></dc:creator><pubDate>Sat, 15 Oct 2005 14:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 14:32:58 GMT]]></title><description><![CDATA[<p>Taurin schrieb:</p>
<blockquote>
<p>6 Zeilen find ich auch schwierig, ohne jeglichen Stil aufzugeben. Aber ohne Fehlerabfragen komm ich auf 8 Zeilen mit allem drum und dran <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 ist eine einsparung von 96% <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="👍"
    /> .<br />
na, mal schauen, was Panke so schafft. und dann schauen, wie er das große programm mit ehlerabfragen und so zusammenklopfen mag. ich schätze mal, so 50% werden's.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892872</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 Oct 2005 14:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 15:54:50 GMT]]></title><description><![CDATA[<p>Meint ihr alles in 8 Zeilen oder nur die Main Funktion?</p>
<p>Tante Edith:</p>
<p>Soo, gerade eben mal rumgetüftelt. Kleiner ist bei mir nicht drin:</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;Quelle: &quot;;
	string quelle;
	cin  &gt;&gt; quelle;

	ifstream in(quelle.c_str(), ios_base::binary);

	cout &lt;&lt; &quot;Ziel: &quot;;
	string ziel;
	cin &gt;&gt; ziel;

	ofstream out(ziel.c_str(), ios_base::binary);

	cout &lt;&lt; &quot;Key: &quot;;
	string key;
	cin  &gt;&gt; key;

	int i=0;
	char c = in.get();
	while(!in.eof())
	{

		c = c^key[i];
		out &lt;&lt; c;
		if(i&lt;=key.size())
			++i;
		else i=0;
		c = in.get();
	}

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/892912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892912</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Sat, 15 Oct 2005 15:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 16:24:45 GMT]]></title><description><![CDATA[<p>Panke schrieb:</p>
<blockquote>
<p>Soo, gerade eben mal rumgetüftelt. Kleiner ist bei mir nicht drin:</p>
</blockquote>
<p>uih! das ist aber hübsch geworden.</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt; //weg
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;

using namespace std;

int main(int argc, char *argv[]) //woziu die parameter?
{
	cout &lt;&lt; &quot;Quelle: &quot;;
	string quelle;
	cin  &gt;&gt; quelle;

	ifstream in(quelle.c_str(), ios_base::binary);

	cout &lt;&lt; &quot;Ziel: &quot;;
	string ziel;
	cin &gt;&gt; ziel;

	ofstream out(ziel.c_str(), ios_base::binary);

	cout &lt;&lt; &quot;Key: &quot;;
	string key;
	cin  &gt;&gt; key;

	int i=0; //aua
	char c = in.get(); //aua
	while(!in.eof())
	{

		c = c^key[i];
		out &lt;&lt; c;
		if(i&lt;=key.size())
			++i;
		else i=0;
		c = in.get();
	}

    system(&quot;PAUSE&quot;); //weg
    return EXIT_SUCCESS;
}
</code></pre>
<p>irendwas an der schleife stört noch.<br />
sagen wir mal, i sei nötig. und daß wir nicht den modulo-operator wollen una uch kein ?: oder -=bool(...).<br />
dann ist</p>
<pre><code class="language-cpp">if(i&lt;=key.size())
			++i;
		else i=0;
</code></pre>
<p>schon beinahe so gut wie</p>
<pre><code class="language-cpp">++i;
if(i==key.size())
   i=0;
</code></pre>
<p>beim enlesen nimmt man gerne</p>
<pre><code class="language-cpp">while(!in.get(c))
</code></pre>
<p>außerdem würde ichg nicht auf c rumschreiben, sondern einfach nur char(c^key[i]) ausgeben.</p>
<p>schauste mal, ob was von meiner neuerlichen mecker einbauebar ist?</p>
<p>und dann mußte halt schauen, ob du wirklich so stark reduzierten code gerne hast, oder leiber etwas mehr schreibst. vielleicht strebste ja auch mal eine stellung an, wo man nach anzahl der codezeilen entlohnt wird (soll's ja geben). oder willst spieleprogrammierer werden, da gehört codebloat zu den grundtugenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892941</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 Oct 2005 16:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 16:31:18 GMT]]></title><description><![CDATA[<p>die 6 zeilen waren eine nicht sinnvoll erreichbare vorgabe. da hab ich etwas übertrieben, damit du in die richtige richtung läufst. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/892942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892942</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 Oct 2005 16:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 16:43:30 GMT]]></title><description><![CDATA[<p>und wieviel zeilen sind sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892945</guid><dc:creator><![CDATA[???????????]]></dc:creator><pubDate>Sat, 15 Oct 2005 16:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 16:50:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">++i;
if(i==key.size())
   i=0;
</code></pre>
<p>Nutze ich denn da das letzte Zeichen des Strings?</p>
<p>Wenn ich</p>
<pre><code class="language-cpp">system(&quot;Pause&quot;);
</code></pre>
<p>weglasse, schließt das Konsolenfenster immer sofort.<br />
Ist der Befehl so grausam, dass sich da etwas eigenes schreiben lohnt?</p>
<p>Wenn deine If Abfrage funktioniert, könnt ich mir folgendes vorstellen, um das <strong>i</strong> lokaler zu halten:</p>
<pre><code class="language-cpp">for(int i = 0; !in.get(c); ++i)
{
    out &lt;&lt; c^key[i];
    if(i==key.size()) //nicht eher i&gt;key.size()?
        i=0;
}
</code></pre>
<p>Die Argumente stammen noch aus der Compilervorlage. Habe sie einfach nicht gelöscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892948</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Sat, 15 Oct 2005 16:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 17:01:47 GMT]]></title><description><![CDATA[<p>??????????? schrieb:</p>
<blockquote>
<p>und wieviel zeilen sind sinnvoll?</p>
</blockquote>
<p>Schätze mal, Programm ist klein, schnell und erfüllt den erdachten Zweck ohne an Lesbarkeit zu verlieren.</p>
<p>Edit: Okay .. daneben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892949</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Sat, 15 Oct 2005 17:01:47 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 16:59:45 GMT]]></title><description><![CDATA[<p>??????????? schrieb:</p>
<blockquote>
<p>und wieviel zeilen sind sinnvoll?</p>
</blockquote>
<p>besonders schöne programme haben höchstens 250 zeilen, das weiß ja jeder. man kann zufälligerweise besonders schöne programme nie in mehrere kleinere dateien aufteilen, so daß sets eine kleine datei eine zeile weniger als eine andere kleine datei hat. aber man kann besonders schöne programme auf x verschiedene weisen in kleinere dateien mit der gleichen zeilenanzahl aufteilen, wobei x immer gerade ist. ist das nicht seltsam?<br />
das gesuchte programm ist ein besonders schönen programm. wenn ich dir nun sage, daß es auch besonders schöne programme gibt, die größer als das gesuchte programm sind und welche, die kleiner sind, isses klar, wieviele zeilen es hat.<br />
viel spaß beim knobeln.<br />
<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/892952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892952</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 Oct 2005 16:59:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 17:03:56 GMT]]></title><description><![CDATA[<p>In Deiner Originalversion war genau an der Stelle ein Fehler den volkard korrigiert hat</p>
<pre><code class="language-cpp">out &lt;&lt; c^key[i];
 if(i&lt;key.size())  // i &lt;= key.size() wäre falsch
    ++i;
 else i=0;
</code></pre>
<p>key[key.size()] ist wohl immer '\0' aber eigentlich nicht zulässig. Ausserdem macht das mit c^'\0' auch nicht so viel Sinn.</p>
<p>volkard hat diesen Fehler mit korrigiert:</p>
<pre><code class="language-cpp">out &lt;&lt; c^key[i];
++i;
if(i==key.size())
   i=0;
</code></pre>
<p>Jetzt ist i immer kleiner key.size().</p>
<p>Ausserdem ist</p>
<pre><code class="language-cpp">i = (i + 1) % key.size();
</code></pre>
<p>noch kürzer, erfüllt den Zweck und ist schlechter lesbar...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892956</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Sat, 15 Oct 2005 17:03:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 17:07:20 GMT]]></title><description><![CDATA[<p>Das c++ strings \0 terminiert sind, wusste ich gar nicht ..<br />
Dann geht das natürlich so wie bei mir nicht, auch wenn es sich nicht wirklich ausgewirkt hat.</p>
<pre><code class="language-cpp">i = (i + 1) % key.size();
</code></pre>
<p>Dann doch lieber ein paar Zeilen mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892959</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Sat, 15 Oct 2005 17:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 17:12:18 GMT]]></title><description><![CDATA[<p>huhu,<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10468">@Panke</a>:<br />
womit hast du C++ gelernt/lernst du?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892964</guid><dc:creator><![CDATA[chris&#x27; 1]]></dc:creator><pubDate>Sat, 15 Oct 2005 17:12:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 17:50:55 GMT]]></title><description><![CDATA[<p>Bücher aus der örtlichen, allerdings schlecht bestückten Bücherei.<br />
Ich empfehle auf jeden Fall mehrere zu lesen, da sie unterschiedliche Bereiche unterschiedlich gut abdecken und ein bisschen Wiederholung sicherlich nicht schadet. Dann gibts hie und da noch ein paar Tuts und Ebooks (klick mal oben auf &quot;Tutorials&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="😉"
    /> ) die einem sicherlich auch bei bestimmten Problemen weiterhelfen. Bei den file streams z.B. musste ich auch erstmal bisschen Lesestoff zusammensuchen, damit's dann klappt.</p>
<p>Edit: Ach ja, und jetzt versuche ich es, indem ich Sachen wie das hier programmiere und das Wissen, das mir dazu fehlt, einfach zusammensuche, wie ich es gerade brauche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892995</guid><dc:creator><![CDATA[Panke]]></dc:creator><pubDate>Sat, 15 Oct 2005 17:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 18:12:33 GMT]]></title><description><![CDATA[<p>Panke schrieb:</p>
<blockquote>
<p>Das c++ strings \0 terminiert sind, wusste ich gar nicht ..</p>
</blockquote>
<p>das wußte bisher keiner. steht nichtmal im standard, so geheim war das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893009</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 Oct 2005 18:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 18:15:24 GMT]]></title><description><![CDATA[<p>zum code: anstatt jedesmal ein neues string-objekt zu erstellen, könntest du das alte auch einfach überschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893014</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Sat, 15 Oct 2005 18:15:24 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 18:18:57 GMT]]></title><description><![CDATA[<p>niemand schrieb:</p>
<blockquote>
<p>key[key.size()] ist wohl immer '\0' aber eigentlich nicht zulässig.</p>
</blockquote>
<p>also erstens sind string nicht nullterminiert, wie volkard gerade schon gesagt hat, und zweitens wäre dann höchstens key[strlen(key) -1] == '\0'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893016</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Sat, 15 Oct 2005 18:18:57 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines Progrämmchen, was sagt ihr dazu? on Sat, 15 Oct 2005 18:56:58 GMT]]></title><description><![CDATA[<p>Ganz so einfach ist es nicht. Wenn schon dann Standard dann richtig:</p>
<blockquote>
<p>21.3.4 basic_string element access [lib.string.access]<br />
const_reference operator[](size_type pos) const;<br />
reference operator[](size_type pos);<br />
1 Returns: If pos &lt; size(), returns data()[pos]. Otherwise, if pos == size(), the const version returns charT(). Otherwise, the behavior is undefined.</p>
</blockquote>
<p>C++ String müssen nicht 0-terminiert sein. Der Standard verlangt dies nicht. Allerdings besteht die Möglichkeit, das die STL Implementation Deiner Wahl, hinter den String ein '\0' macht. Damit ist die Implementation von string::c_str() sehr einfach, ausserdem lässt sich so obige Regel auch einfach erledigen. Damit besteht die Chance, dass s[s.size()] == '\0' ist, obwohl der Zugriff im nicht const-Fall undefiniert ist. Verlassen sollte sich keiner darauf. Aufgrund obiger (komplizierter) Regel würde ich s[s.size()] meiden (obwohl es nicht immer ein Fehler sein muss).</p>
<p>EDIT: komma entfernt<br />
EDIT2: den beim entfernen eingebauten Tippfehler beseitigt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/893035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/893035</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Sat, 15 Oct 2005 18:56:58 GMT</pubDate></item></channel></rss>