<?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[Erste Programm - Kritik]]></title><description><![CDATA[<p>Hallo,<br />
bin jetzt mit meinem ersten Programm (na gut, nach 'Hello World') fertig. Ich habe schon etwas Erfahrung in <a href="http://VB.NET" rel="nofollow">VB.NET</a> und kann mich noch erinnern, dass meine ersten Tools schrecklich waren. Eine Menge Bugs und noch mehr unschöner Code.</p>
<p>Ich würde gerne mal ein kleines Feedback hören, am besten die harte Wahrheit. Ich möchte diesmal von Anfang an unschönen Code vermeiden. Erzählt mir bitte einfach kurz, wie ich mich mache und was man verbessern könnte / muss <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>Es handelt sich hierbei um das Spiel &quot;HangMan&quot; in einer Consolen-Anwendung und besteht nur aus einer Funktion neben der Main:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
using namespace std;
void Play(string word);
string xStr;
string oldStr = &quot;&quot;;
int wordLength;
int main() {
	//RateWort wird festgelegt
	string word = &quot;HangMan&quot;;

	//Wortlänge wird bestimmt für die Schleifen
	wordLength = word.length();

	//&quot;Password-Chars&quot;
	for (int i = 0; i &lt; wordLength; i++) {
		xStr += &quot;-&quot;;
	}

	oldStr = xStr;
	cout &lt;&lt; &quot;Los geht's&quot; &lt;&lt; endl;
	cout &lt;&lt; xStr &lt;&lt; endl;

	Play(word);
	return 0;
}
void Play(string word) {
	//Falls eine Charkette eingegeben wird, zählt der erste Buchstabe

	string read;
	char firstLetter;
	cin &gt;&gt; read;
	firstLetter = read[0];

	xStr = &quot;&quot;;
	//Für jeden Buchstaben
	for (int ii = 0; ii &lt; wordLength; ii++) {
		//ersten Buchstaben als Vergleichschar wählen
		char vglChar = firstLetter;

		//Wenn der Buchstabe dem Vergleichschar des Users entspricht
		if (tolower(word[ii]) == tolower(vglChar)) {
		//LösungsWortBuchstabe = UserEingabe

			//Die oldStr-Überprüfung, damit bereits gelöste Buchstaben
			//nicht wieder überschrieben werden

			if (oldStr[ii] == '-' || oldStr[ii] == 0) {
				if (xStr[ii] == '-' || xStr[ii] == 0) {
					//Wenn noch nicht gelöst
					xStr += word[ii];
				}
			} else {
				//Wenn schon gelöst, gelösten Buchstaben adden
				xStr += oldStr[ii];
			}
		}	else {
			//LösungsWortBuchstabe != UserEingabe

			//Die oldStr-Überprüfung, damit bereits gelöste Buchstaben
			//nicht wieder überschrieben werden
			if (oldStr[ii] == '-' || oldStr[ii] == 0) {
				if (xStr[ii] == '-' || xStr[ii] == 0) {
					//nicht gelöste Buchstaben als Passwort-Char anzeigen
					xStr += '-';
				}
			} else {
				//Wenn schon gelöst, gelösten Buchstaben adden
				xStr += oldStr[ii];
			}
		}
	}

	//oldStr aktualisieren
	oldStr = xStr;

	//Ausgabe, die anzeigt, ob Erfolg
	cout &lt;&lt; xStr &lt;&lt; endl;

	//Wenn Wort noch nicht vollständig gelöst -&gt; Rekursion
	if (xStr != word) {
		Play(word);
	} else {
	//Ansonsten Erfolgsmeldung
	cout &lt;&lt; &quot;Gelöst ;)&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Beliebige Taste zum Beenden drücken...&quot;;
	//Beenden
	cin.get();
	}
	return;
}
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308270/erste-programm-kritik</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 21:12:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308270.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Sep 2012 18:52:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erste Programm - Kritik on Wed, 19 Sep 2012 18:52:01 GMT]]></title><description><![CDATA[<p>Hallo,<br />
bin jetzt mit meinem ersten Programm (na gut, nach 'Hello World') fertig. Ich habe schon etwas Erfahrung in <a href="http://VB.NET" rel="nofollow">VB.NET</a> und kann mich noch erinnern, dass meine ersten Tools schrecklich waren. Eine Menge Bugs und noch mehr unschöner Code.</p>
<p>Ich würde gerne mal ein kleines Feedback hören, am besten die harte Wahrheit. Ich möchte diesmal von Anfang an unschönen Code vermeiden. Erzählt mir bitte einfach kurz, wie ich mich mache und was man verbessern könnte / muss <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>Es handelt sich hierbei um das Spiel &quot;HangMan&quot; in einer Consolen-Anwendung und besteht nur aus einer Funktion neben der Main:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
using namespace std;
void Play(string word);
string xStr;
string oldStr = &quot;&quot;;
int wordLength;
int main() {
	//RateWort wird festgelegt
	string word = &quot;HangMan&quot;;

	//Wortlänge wird bestimmt für die Schleifen
	wordLength = word.length();

	//&quot;Password-Chars&quot;
	for (int i = 0; i &lt; wordLength; i++) {
		xStr += &quot;-&quot;;
	}

	oldStr = xStr;
	cout &lt;&lt; &quot;Los geht's&quot; &lt;&lt; endl;
	cout &lt;&lt; xStr &lt;&lt; endl;

	Play(word);
	return 0;
}
void Play(string word) {
	//Falls eine Charkette eingegeben wird, zählt der erste Buchstabe

	string read;
	char firstLetter;
	cin &gt;&gt; read;
	firstLetter = read[0];

	xStr = &quot;&quot;;
	//Für jeden Buchstaben
	for (int ii = 0; ii &lt; wordLength; ii++) {
		//ersten Buchstaben als Vergleichschar wählen
		char vglChar = firstLetter;

		//Wenn der Buchstabe dem Vergleichschar des Users entspricht
		if (tolower(word[ii]) == tolower(vglChar)) {
		//LösungsWortBuchstabe = UserEingabe

			//Die oldStr-Überprüfung, damit bereits gelöste Buchstaben
			//nicht wieder überschrieben werden

			if (oldStr[ii] == '-' || oldStr[ii] == 0) {
				if (xStr[ii] == '-' || xStr[ii] == 0) {
					//Wenn noch nicht gelöst
					xStr += word[ii];
				}
			} else {
				//Wenn schon gelöst, gelösten Buchstaben adden
				xStr += oldStr[ii];
			}
		}	else {
			//LösungsWortBuchstabe != UserEingabe

			//Die oldStr-Überprüfung, damit bereits gelöste Buchstaben
			//nicht wieder überschrieben werden
			if (oldStr[ii] == '-' || oldStr[ii] == 0) {
				if (xStr[ii] == '-' || xStr[ii] == 0) {
					//nicht gelöste Buchstaben als Passwort-Char anzeigen
					xStr += '-';
				}
			} else {
				//Wenn schon gelöst, gelösten Buchstaben adden
				xStr += oldStr[ii];
			}
		}
	}

	//oldStr aktualisieren
	oldStr = xStr;

	//Ausgabe, die anzeigt, ob Erfolg
	cout &lt;&lt; xStr &lt;&lt; endl;

	//Wenn Wort noch nicht vollständig gelöst -&gt; Rekursion
	if (xStr != word) {
		Play(word);
	} else {
	//Ansonsten Erfolgsmeldung
	cout &lt;&lt; &quot;Gelöst ;)&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;Beliebige Taste zum Beenden drücken...&quot;;
	//Beenden
	cin.get();
	}
	return;
}
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252811</guid><dc:creator><![CDATA[flammus]]></dc:creator><pubDate>Wed, 19 Sep 2012 18:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Wed, 19 Sep 2012 21:06:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">string xStr; 
string oldStr = &quot;&quot;;
</code></pre>
<p>Nichtssagende Namen sind nie gut.</p>
<pre><code class="language-cpp">for (int i = 0; i &lt; wordLength; i++) { 
    xStr += &quot;-&quot;; 
}
</code></pre>
<p>Ist OK, geht aber einfacher (kürzer) mit</p>
<p><code>xStr = string(wordLength, '-');</code></p>
<pre><code class="language-cpp">string read; 
char firstLetter; 
cin &gt;&gt; read; 
firstLetter = read[0];
</code></pre>
<p>Und was passiert wenn der Input-Stream &quot;aus&quot; ist? Dann ist &quot;read&quot; leer und es klescht.</p>
<pre><code class="language-cpp">for (int ii = 0; ii &lt; wordLength; ii++)
</code></pre>
<p>Wieso ii und nicht einfach nur i? Wäre üblicher...</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar)) {
</code></pre>
<p><code>tolower(vglChar)</code> bleibt in der Schleife ja immer gleich, du kannst den tolower-Aufruf also genau so gut aus der Schleife rausziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252858</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 19 Sep 2012 21:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Thu, 20 Sep 2012 16:15:17 GMT]]></title><description><![CDATA[<p>Was jetzt kommt ist einigermassen schmerzhaft...</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar)) { 
	if (oldStr[ii] == '-' || oldStr[ii] == 0) {   // Der Check oldStr[ii] == 0 ist unnötig - wozu soll der gut sein?

		// Du hast xStr vor der Schleife auf &quot;&quot; (=Länge 0) gesetzt.
		// D.h. der string enthält beim 1. Durchlauf genau NULL Zeichen, keine, nix.
		// D.h. du darfst auch auf keine Zeichen über xStr[index] zugreifen, auch nicht mit index == 0.
		// Was du da machst wird zwar mit quasi allen Implementierungen funktionieren,
		// aber im Debug-Mode solltest du zumindest ein assert() bekommen, und ... trotz dem es wohl funktionieren wird ist es falsch.
		// Und WENN es funktioniert, dann ist der Wert den du bekommst immer 0, weil du den &quot;präventiv angehängten Null-Terminator&quot; bekommst.
		// D.h. das &quot;if&quot; hier gibt immer &quot;true&quot;, kann also weg.
		if (xStr[ii] == '-' || xStr[ii] == 0) {
			xStr += word[ii]; 
		} 
	} else { 
		xStr += oldStr[ii]; 
	} 
} else {
	if (oldStr[ii] == '-' || oldStr[ii] == 0) { 
		// Hier gilt das selbe wie oben: der Zugriff xStr[ii] ist falsch, und das if kann weg.
		if (xStr[ii] == '-' || xStr[ii] == 0) { 
			xStr += '-'; 
		} 
	} else { 
		xStr += oldStr[ii]; 
	} 
}
</code></pre>
<p>Bauen wir das also mal um:</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar)) { 
	if (oldStr[ii] == '-') {
		xStr += word[ii];
	} else {
		xStr += oldStr[ii];
	}
} else {
	if (oldStr[ii] == '-') { 
		xStr += '-'; 
	} else { 
		xStr += oldStr[ii]; 
	} 
}
</code></pre>
<p>Fällt dir was auf?<br />
Wenn <code>oldStr[ii]</code> ein <code>'-'</code> ist dann ein <code>'-'</code> anhängen und sonst <code>oldStr[ii]</code> anhängen.<br />
Also sinngemäss... wir schreiben jeden Tag auf was für ein Tag ist, ausser Sonntag, da schreiben wir auf dass Sonntag ist.<br />
Anders gesagt: das letzte &quot;if&quot; ist auch unnötig:</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar)) { 
	if (oldStr[ii] == '-') {
		xStr += word[ii];
	} else {
		xStr += oldStr[ii];
	}
} else {
	xStr += oldStr[ii]; 
}
</code></pre>
<p>Und jetzt können wir noch die beiden else-Zweige zusammenfassen, weil die eh das gleiche machen:</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar)
    &amp;&amp; oldStr[ii] == '-')
{ 
	xStr += word[ii];
} else {
	xStr += oldStr[ii];
}
</code></pre>
<p>Und siehe da, wieder redundanter Code.<br />
Wenn gefunden, und in oldStr noch nicht gefunden, dann word[ii] anhängen, sonst oldStr[ii] anhängen.<br />
Öhm. Also das <code>&amp;&amp; oldStr[ii] == '-'</code> hier ist überflüssig.<br />
Weil ... wenn gefunden, dann soll eh immer word[ii] angehängt werden. Wenn nämlich oldStr[ii] nicht gleich '-' ist, dann kann das nur deswegen sein, weil vorher schonmal word[ii] an der Stelle angehängt wurde. Also wenn oldStr[ii] nicht '-' ist dann ist es gleich word[ii].</p>
<p>D.h. das &amp;&amp; kann weg und dann haben wir</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar))
{ 
	xStr += word[ii];
} else {
	xStr += oldStr[ii];
}
</code></pre>
<p>So. Jetzt ist auch endlich mal verständlich was der ganze Code sollte.</p>
<p>Und jetzt fällt auch auf, dass du das noch billiger haben kannst. Wozu xStr immer löschen und dann neu aufbauen? Statt dessen kannst du gleich einfach die Zeichen in xStr überschreiben die gelöst wurden.<br />
Dadurch wird dann auch oldStr überflüssig, d.h. die Variable entfernst du ganz. Und das xStr=&quot;&quot; vor der Schleife kommt weg, und das if in der Schleife wird zu</p>
<pre><code class="language-cpp">if (tolower(word[ii]) == tolower(vglChar)) { 
	xStr[ii] = word[ii];
}
</code></pre>
<p>Tadaaaa.</p>
<p>Liest sich irgendwie einfacher wie ich finde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252861</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 20 Sep 2012 16:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Wed, 19 Sep 2012 21:21:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//Wenn Wort noch nicht vollständig gelöst -&gt; Rekursion 
if (xStr != word) { 
    Play(word); 
} else { 
    //Ansonsten Erfolgsmeldung 
    cout &lt;&lt; &quot;Gelöst ;)&quot; &lt;&lt; endl; 
    cout &lt;&lt; &quot;Beliebige Taste zum Beenden drücken...&quot;; 
    //Beenden 
    cin.get(); 
} 
return;
</code></pre>
<p>Also Rekursion deren max. Tiefe du nicht kontrollieren kannst finde ich nicht gut. Und Rekursion wo es - so wie hier - überhaupt nicht nötig ist, finde ich auch nicht gut.<br />
(Die Tiefe könntest du kontrollieren indem du dir falsch geratene Buchstaben merkst -- gibt ja nur endlich viele Buchstaben. Das 2. Argument bleibt aber.)<br />
Ich würde eher einfach true/false zurückgeben, und Play dann in einer Schleife aufrufen.</p>
<p>Die &quot;Gelöst&quot; Ausgabe an der Stelle finde ich auch komisch. Ist eigenartig &quot;asymmetrisch&quot; - der &quot;Start-Text&quot; (&quot;Los geht's&quot;) wird in main() ausgegeben, der &quot;End-Text&quot; (&quot;Gelöst&quot;) aber in Play(). <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252862</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 19 Sep 2012 21:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Wed, 19 Sep 2012 21:44:36 GMT]]></title><description><![CDATA[<p>Zusammengefasst, mit 1-2 weiteren kleinen &quot;Schönheitskorrekturen&quot;:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt; 
#include &lt;cctype&gt;

using namespace std; 

bool Play(string word); 

string xStr; 

int main() { 
	string word = &quot;HangMan&quot;; 

	xStr = string(word.length(), '-');

	cout &lt;&lt; &quot;Los geht's&quot; &lt;&lt; endl; 

	bool done = false;
	while (!done)
	{
		cout &lt;&lt; xStr &lt;&lt; endl; 
		done = Play(word);
	}

	cout &lt;&lt; &quot;Ferdich, hurrah!&quot; &lt;&lt; endl; 

	return 0; 
} 

bool Play(string word) { 

	string inputString; 
	cin &gt;&gt; inputString; 

	if (!cin || inputString.empty()) {
		cout &lt;&lt; &quot;WTF!?!&quot; &lt;&lt; endl;
		exit(1);
	}

	char const inputChar = inputString[0]; 
	char const inputCharLower = tolower(inputChar);

	for (size_t i = 0; i &lt; word.length(); i++) { 
		if (tolower(word[i]) == inputCharLower) { 
			xStr[i] = word[i]; 
		}
	}

	return xStr == word;
}
</code></pre>
<p>Da finde ich jetzt immer noch ein paar Dinge komisch, aber das sollte für's erste mal reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2252864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2252864</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 19 Sep 2012 21:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Fri, 21 Sep 2012 20:46:21 GMT]]></title><description><![CDATA[<p>sicher kein Anfängercode, aber viel lustiger:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt; // transform
#include &lt;ctime&gt; // time
#include &lt;cstdlib&gt; // (s)rand
#include &lt;iostream&gt;
#include &lt;locale&gt; // ctype
#include &lt;string&gt;

int main()
{
    using namespace std;
    string words[] = {
        &quot;Yachtclubbesitzer&quot;,
        &quot;Bettelmoench&quot;,
        &quot;HangMan&quot;,
        &quot;Motoraufhaengung&quot;,
        &quot;Hundefaenger&quot;,
        &quot;Koelnisch-Wasser&quot;
        &quot;Neuschwanstein&quot;,
        &quot;Regenbogenforelle&quot;,
        &quot;USB-Stick&quot;,
        &quot;Grobmotoriker&quot;
    };
    srand( time(0) );
    const string&amp; word = words[rand() % sizeof(words)/sizeof(*words)];

    cout &lt;&lt; &quot;Bitte Buchstaben eingeben, un das Wort zu raten&quot; &lt;&lt; endl;
    const ctype&lt; char &gt;&amp; ct = use_facet&lt; ctype&lt; char &gt; &gt;( locale() );
    string result( word.size(), '-' );
    for( char c; result != word &amp;&amp; cin &gt;&gt; c; cout &lt;&lt; result &lt;&lt; endl )
        transform( begin(word), end(word), begin(result), begin(result),
            [&amp;ct, &amp;c]( char w, char r ) { return ct.tolower( c ) == ct.tolower( w )? w: r; } );
    if( result == word )
        cout &lt;&lt; &quot;&lt;&lt; Ferdich, hurrah! &gt;&gt;&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253418</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 21 Sep 2012 20:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Sat, 22 Sep 2012 05:28:24 GMT]]></title><description><![CDATA[<p>Das letzte Beispiel ist heftig. Ich bin auch dabei C++ in Verbindung mit Qt zu lernen. Ich lese lieber einen Code der mehr Zeilen hat wir nötig, aber dafür sehr übersichtlich ist, als wenn viel in eine Zeile gequetscht wird.</p>
<p>Wie sieht es eigentlich mit den Blockklammern aus, setzt macht man die nicht in C++ anders als in Java? Von der Funktion her ist es ja egal, aber gibt es da nicht irgendwelche Codingrulez unter den C++ Programmmierern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253449</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 22 Sep 2012 05:28:24 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Sat, 22 Sep 2012 09:04:09 GMT]]></title><description><![CDATA[<p>Butterbrot schrieb:</p>
<blockquote>
<p>Wie sieht es eigentlich mit den Blockklammern aus, setzt macht man die nicht in C++ anders als in Java? Von der Funktion her ist es ja egal, aber gibt es da nicht irgendwelche Codingrulez unter den C++ Programmmierern?</p>
</blockquote>
<p>Es gibt sehr viele verschiedene Stile - und im Grunde alle Varianten lassen sich in der Praxis auch finden:</p>
<pre><code class="language-cpp">if(foo) {
} else {
}
</code></pre>
<pre><code class="language-cpp">if(foo)
{
}
else
{
}
</code></pre>
<pre><code class="language-cpp">if(foo) {
}
else {
}
</code></pre>
<pre><code class="language-cpp">if(foo)
    {
    }
else
    {
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2253465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253465</guid><dc:creator><![CDATA[Mr X]]></dc:creator><pubDate>Sat, 22 Sep 2012 09:04:09 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Mon, 24 Sep 2012 08:51:54 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7393">@Werner</a> oder sonst jemand <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Was macht dieser Teil in transform (VS2008 meckert bei mir ausserdem: Syntaxfehler: '[')</p>
<pre><code class="language-cpp">[&amp;ct, &amp;c]( char w, char r ) { return ct.tolower( c ) == ct.tolower( w )? w: r; }
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253897</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Mon, 24 Sep 2012 08:51:54 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Mon, 24 Sep 2012 09:08:01 GMT]]></title><description><![CDATA[<p>Das ist ein Lambda-Ausdruck. Den gibt es erst seit C++11, d.h. du musst einen neueren Compiler nehmen oder den Lambda-Ausdruck als normale Funktion schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253901</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 24 Sep 2012 09:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Mon, 24 Sep 2012 09:09:03 GMT]]></title><description><![CDATA[<p>CatDog11 schrieb:</p>
<blockquote>
<p>Was macht dieser Teil in transform (VS2008 meckert bei mir ausserdem: Syntaxfehler: '[')</p>
<pre><code class="language-cpp">[&amp;ct, &amp;c]( char w, char r ) { return ct.tolower( c ) == ct.tolower( w )? w: r; }
</code></pre>
</blockquote>
<p>siehe C++11-Standard Kapitel 5.1.2 <a href="http://www.cprogramming.com/c++11/c++11-lambda-closures.html" rel="nofollow">Lambda expressions</a>. VS2008 kann das nicht, VS2010 kann es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253903</guid><dc:creator><![CDATA[Der-neue-Standard-C++11]]></dc:creator><pubDate>Mon, 24 Sep 2012 09:09:03 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Mon, 24 Sep 2012 10:16:49 GMT]]></title><description><![CDATA[<p>CatDog11 schrieb:</p>
<blockquote>
<p>Was macht dieser Teil in transform</p>
</blockquote>
<p>Das nennt sich Lambda(closure) und erzeugt, simpel ausgedrückt, ein Funktionsobjekt, dessen operator() zwei chars als Argumente erwartet und damit das macht, was zwischen den geschweiften Klammern steht.</p>
<blockquote>
<p>(VS2008 meckert bei mir ausserdem: Syntaxfehler: '[')</p>
</blockquote>
<p>Kein Wunder, Lambdas sind ein C++11 Feature, das vom VS2008 noch nicht unterstützt wird.</p>
<p>C++03-Version:</p>
<pre><code class="language-cpp">//irgendwo*

struct LowerComp {
  char&amp; c;
  const ctype&lt; char &gt;&amp; ct;
  LowerLess(char&amp; c, const ctype&lt; char &gt;&amp; ct) : c(c), ct(ct) {}
  char operator()( char w, char r ) 
  { return ct.tolower( c ) == ct.tolower( w )? w: r; }
};

//dann:
transform( begin(word), end(word), begin(result), begin(result),
            LowerComp(c, ct));
</code></pre>
<p>______________________<br />
* Nicht irgendwo, sondern außerhalb jeglicher Funktionen, C++03 erlaubt keine lokalen Typen in Templates</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253904</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 24 Sep 2012 10:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Mon, 24 Sep 2012 11:20:02 GMT]]></title><description><![CDATA[<p>Vielen Dank für die ausführliche Erklärung, somit erklärt sich das Ganze <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>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253924</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Mon, 24 Sep 2012 11:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to Erste Programm - Kritik on Mon, 24 Sep 2012 12:09:43 GMT]]></title><description><![CDATA[<p>Falls es irgendjemand interessiert noch zusammengefasst eine Version, welche bei mir zumindest in VS2008 lauffähig ist (weil ich das kleine Progrämmchen von Werner eigtl. ziemlich cool finde). Vielleicht interessierts ja jemand</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt; // transform
#include &lt;ctime&gt; // time
#include &lt;cstdlib&gt; // (s)rand
#include &lt;iostream&gt;
#include &lt;locale&gt; // ctype
#include &lt;string&gt; 

struct LowerComp {
  char&amp; c;
  const std::ctype&lt;char&gt;&amp; ct;
  LowerComp(char&amp; lc, const std::ctype&lt;char&gt;&amp; lct) : c(lc), ct(lct) {}
  char operator()( char w, char r ) { return ct.tolower( c ) == ct.tolower( w ) ? w : r; }
}; 

int main()
{
	using namespace std;
    string words[] = {
        &quot;Yachtclubbesitzer&quot;,
        &quot;Bettelmoench&quot;,
        &quot;HangMan&quot;,
        &quot;Motoraufhaengung&quot;,
        &quot;Hundefaenger&quot;,
        &quot;Koelnisch-Wasser&quot;,
        &quot;Neuschwanstein&quot;,
        &quot;Regenbogenforelle&quot;,
        &quot;USB-Stick&quot;,
        &quot;Grobmotoriker&quot;
    };
    srand( (unsigned int) time(0) );
    const string&amp; word = words[rand() % sizeof(words)/sizeof(*words)];

    cout &lt;&lt; &quot;Bitte Buchstaben eingeben, un das Wort zu raten&quot; &lt;&lt; endl;
    const ctype&lt; char &gt;&amp; ct = use_facet&lt; ctype&lt; char &gt; &gt;( locale() );
    string result( word.size(), '-' );

    for( char c; result != word &amp;&amp; cin &gt;&gt; c; cout &lt;&lt; result &lt;&lt; endl )
	{
	     transform( word.begin(), word.end(), result.begin(), result.begin(), LowerComp(c, ct));
	}

    if( result == word )
        cout &lt;&lt; &quot;&lt;&lt; Ferdich, hurrah! &gt;&gt;&quot; &lt;&lt; endl;

    return 0; 
}
</code></pre>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2253933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2253933</guid><dc:creator><![CDATA[CatDog11]]></dc:creator><pubDate>Mon, 24 Sep 2012 12:09:43 GMT</pubDate></item></channel></rss>