<?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[Namensgenerator]]></title><description><![CDATA[<p>Hey Leute ich beschäftige mich ja jetzt schon eine Weile mit cpp und ich finde in diesem Code hier :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;conio.h&gt;

#include &lt;stdlib.h&gt;//srand
#include &lt;time.h&gt;//time

using namespace std;

string generiere_name(int);

int main(){
	srand (time(NULL));

	cout &lt;&lt; &quot;Wie viele Zeichen soll der zufällig generierte Name haben?\n&quot;
	     &lt;&lt; &quot;Wahl: &quot;;
	int z_anzahl;
	cin &gt;&gt; z_anzahl;

    string name = generiere_name(z_anzahl);

    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; name;
    getch();

	return 0;
}

//65 (A) - 90 (Z)

string generiere_name(int z_anzahl){
	string name;
	string zwischenspeicher;
	int ascii_anfang=65;
	for(unsigned int i=0;i&lt;z_anzahl;i++){
        int zahl;
		zahl = rand() % 25 + 0;
		zahl = zahl + ascii_anfang;
		static_cast&lt;char&gt; (zahl);
		zwischenspeicher = zahl;
		name = name + zwischenspeicher;
	}
    return name;
}
</code></pre>
<p>(vor allem in der Funktion) sind sehr viele Variablen kann ich das kürzen?<br />
Oder eventuell sogar noch besser schreiben?<br />
Weil mein Auge sagt mir das es nicht gut aussieht <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>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326890/namensgenerator</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 20:24:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326890.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 Jul 2014 20:11:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Namensgenerator on Sat, 12 Jul 2014 20:11:29 GMT]]></title><description><![CDATA[<p>Hey Leute ich beschäftige mich ja jetzt schon eine Weile mit cpp und ich finde in diesem Code hier :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;conio.h&gt;

#include &lt;stdlib.h&gt;//srand
#include &lt;time.h&gt;//time

using namespace std;

string generiere_name(int);

int main(){
	srand (time(NULL));

	cout &lt;&lt; &quot;Wie viele Zeichen soll der zufällig generierte Name haben?\n&quot;
	     &lt;&lt; &quot;Wahl: &quot;;
	int z_anzahl;
	cin &gt;&gt; z_anzahl;

    string name = generiere_name(z_anzahl);

    cout &lt;&lt; &quot;Name: &quot; &lt;&lt; name;
    getch();

	return 0;
}

//65 (A) - 90 (Z)

string generiere_name(int z_anzahl){
	string name;
	string zwischenspeicher;
	int ascii_anfang=65;
	for(unsigned int i=0;i&lt;z_anzahl;i++){
        int zahl;
		zahl = rand() % 25 + 0;
		zahl = zahl + ascii_anfang;
		static_cast&lt;char&gt; (zahl);
		zwischenspeicher = zahl;
		name = name + zwischenspeicher;
	}
    return name;
}
</code></pre>
<p>(vor allem in der Funktion) sind sehr viele Variablen kann ich das kürzen?<br />
Oder eventuell sogar noch besser schreiben?<br />
Weil mein Auge sagt mir das es nicht gut aussieht <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>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408322</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Sat, 12 Jul 2014 20:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Namensgenerator on Sat, 12 Jul 2014 21:25:19 GMT]]></title><description><![CDATA[<p>Ich würd das so schreiben:(40-45)</p>
<pre><code>int zahl=rand() % 25 + ascii_anfang;
name += static_cast&lt;char&gt; (zahl);
</code></pre>
<p>sollte das selbe ergeben...<br />
bin mir aber nicht hundert pro sicher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408329</guid><dc:creator><![CDATA[Ben123]]></dc:creator><pubDate>Sat, 12 Jul 2014 21:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to Namensgenerator on Sat, 12 Jul 2014 21:43:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>erstmal vorne weg ich lerne auch noch C++ aber ich kann es ja mal versuchen.</p>
<p>Das erste was mir aufgefallen ist, dass ich deinen code in Visual Studio2013 nicht kompilieren kann.<br />
Der Compiler meckert das getch()deprecated ist.</p>
<p>Fehler 2 error C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.</p>
<h1>Ich kenn mich mit getch nicht aus vielleicht googelst du mal.</h1>
<p>Ich habe die string Funktion mal umgeschrieben so hätte ich das gemacht.</p>
<pre><code>string generiere_name(int z_anzahl){
    string name;
    name.reserve(z_anzahl);

    vector&lt;char&gt; alphabet;
    alphabet.reserve(26);
    // erstelle Alphabet
    for (int i = 0; i &lt;= 25; ++i)
        alphabet.push_back(65 + i);
    //Wähle Buchstabe und schiebe ihn in den string
    for (int i = 0; i &lt; z_anzahl; ++i)
        name += alphabet[rand() % 25];

    return std::move(name);
}
</code></pre>
<p>P.S. frage an alle:<br />
Ich bin mir mit std::move immer ein wenig unsicher.<br />
Ich weiß, dass der compiler, wenn er es erkennen kann und der move-constructor vorhanden ist automatisch moved.</p>
<p>Ansonsten muss man ihm einen kleinen Tipp geben.<br />
Reicht es ihm den Tipp im return statement zu geben oder muss es auch beim Funktionsaufruf sein, oder ist es sicherer es auf beiden Seiten zu machen?</p>
<p>e.g.:</p>
<pre><code>string name = std:move(generiere_name());
 //
return std::move(name);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2408330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408330</guid><dc:creator><![CDATA[chp++]]></dc:creator><pubDate>Sat, 12 Jul 2014 21:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Namensgenerator on Sat, 12 Jul 2014 23:56:09 GMT]]></title><description><![CDATA[<p>a-Z</p>
<pre><code>string generiere_name(int z_anzahl){
    string name;

	for (int i = 0; i &lt; z_anzahl; ++i)
		name += ((rand() % 2) ? 'a' : 'A') + rand() % 26;

    return name;
}
</code></pre>
<p>a-z</p>
<pre><code>string generiere_name(int z_anzahl){
    string n :( ame;

	for (int i = 0; i &lt; z_anzahl; ++i)
		name += 'a' + rand() % 26;

    return name;
}
</code></pre>
<p>A-Z</p>
<pre><code>string generiere_name(int z_anzahl){
    string name;

	for (int i = 0; i &lt; z_anzahl; ++i)
		name += 'A' + rand() % 26;

    return name;
}
</code></pre>
<p>Wenn ein Name nur aus bestimmten Buchstaben bestehen soll:</p>
<pre><code>string generiere_name(int z_anzahl){
	static const char Ch[] = { 'a', 'b', 'c', 'd', 'e' };

    string name;

	for (int i = 0; i &lt; z_anzahl; ++i)
		name += Ch[rand() % sizeof(Ch)];

    return name;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2408341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408341</guid><dc:creator><![CDATA[ghjghjghj]]></dc:creator><pubDate>Sat, 12 Jul 2014 23:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to Namensgenerator on Sun, 13 Jul 2014 06:58:52 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich weiß, dass der compiler, wenn er es erkennen kann und der move-constructor vorhanden ist automatisch moved.</p>
</blockquote>
<p>Nicht ganz korrekt. Der Compiler macht alles nach Sprachstandard - und der schreibt vor, dass wenn der Initializer ein rvalue ist, und ein Move-Konstruktor vorhanden ist*, dieser aufgerufen wird. Er kann nicht automatisch Situationen erkennen wo ein Objekt nicht mehr benutzt wird.</p>
<blockquote>
<p>Reicht es ihm den Tipp im return statement zu geben oder muss es auch beim Funktionsaufruf sein, oder ist es sicherer es auf beiden Seiten zu machen?</p>
</blockquote>
<p>Es reicht ihm <strong>gar keinen Tipp</strong> zu geben! Nämlich dank <a href="http://en.wikipedia.org/wiki/Return_value_optimization" rel="nofollow">(N)RVO</a>.</p>
<p>Mit C++11 sähe das ganze übrigens so aus</p>
<pre><code>#include &lt;random&gt;
#include &lt;algorithm&gt;
#include &lt;string&gt;

template &lt;char first, char last&gt;
std::string generateRandomString( std::string::size_type n )
{
	static std::uniform_int_distribution&lt;char&gt; dis(first, last);
	static std::mt19937 eng( std::random_device{}() );

	std::string rval; rval.reserve(n);
	std::generate_n( std::back_inserter(rval), n,  [&amp;] {return dis(eng);} );
	return rval;
}

template &lt;char const* str, std::size_t length&gt;
std::string generateRandomString( std::string::size_type n )
{
	static std::uniform_int_distribution&lt;std::size_t&gt; dis(0, length-1);
	static std::mt19937 eng( std::random_device{}() );

	std::string rval; rval.reserve(n);
	std::generate_n( std::back_inserter(rval), n, [&amp;] {return str[dis(eng)];} );
	return rval;
}

auto const generateRandomUpper = generateRandomString&lt;'A', 'Z'&gt;;
auto const generateRandomLower = generateRandomString&lt;'a', 'z'&gt;;
char constexpr letters[] = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;
auto const generateRandomAlpha = generateRandomString&lt;letters, sizeof(letters)&gt;;

#include &lt;iostream&gt;

int main()
{
	for (int n; std::cin &gt;&gt; n;)
		std::cout &lt;&lt; generateRandomUpper(n) &lt;&lt; ' ' &lt;&lt; generateRandomLower(n) &lt;&lt; ' ' &lt;&lt; generateRandomAlpha(n) &lt;&lt; '\n';
}
</code></pre>
<p>Natürlich wollen wir eigentlich dass das Ganze über Iteratoren funktioniert - der Einfachkeit halber ist das aber einfach mit <code>std::string</code> implementiert.</p>
<p>* nicht als <code>deleted</code> -definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408348</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 13 Jul 2014 06:58:52 GMT</pubDate></item><item><title><![CDATA[Reply to Namensgenerator on Sun, 13 Jul 2014 10:41:21 GMT]]></title><description><![CDATA[<p>ghjghjghj schrieb:</p>
<blockquote>
<p>a-Z</p>
<p>a-z</p>
<pre><code>string generiere_name(int z_anzahl){
    string n :( ame;
    
	for (int i = 0; i &lt; z_anzahl; ++i)
		name += 'a' + rand() % 26;

    return name;
}
</code></pre>
</blockquote>
<p>Die Lösung find ich wirklich schön minimalistisch.</p>
<p>Arcoth schrieb:</p>
<blockquote>
<p>Nicht ganz korrekt. Der Compiler macht alles nach Sprachstandard - und der schreibt vor, dass wenn der Initializer ein rvalue ist, und ein Move-Konstruktor vorhanden ist*, dieser aufgerufen wird. Er kann nicht automatisch Situationen erkennen wo ein Objekt nicht mehr benutzt wird.</p>
</blockquote>
<p>Danke! Hat mir wirklich sehr geholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408370</guid><dc:creator><![CDATA[chp++]]></dc:creator><pubDate>Sun, 13 Jul 2014 10:41:21 GMT</pubDate></item><item><title><![CDATA[Reply to Namensgenerator on Fri, 25 Jul 2014 12:04:48 GMT]]></title><description><![CDATA[<p>Danke Leute!<br />
Eure Lösungen sind wirklich um einiges besser als mein Ansatz <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>Die Antwort kommt ein wenig zu spät, da ich im Urlaub war -&gt; sorry ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410452</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Fri, 25 Jul 2014 12:04:48 GMT</pubDate></item></channel></rss>