<?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[int nach string wandeln - Gegenstueck zu atoi]]></title><description><![CDATA[<p>Mit atoi kann ich unter C eine Zahl in einen String umwandeln, fuer den Rueckweg wird der 'Trick' mittels scanf empfohlen.</p>
<p>Da liegt es fuer mich als Anfaenger natuerlich nahe scanf in eine Function zu legen, was erstens uebt und zweitens meinen Code lesbarer macht.</p>
<p>Realisiert habe ich das mal so:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main (void) {

    int i;
    int n;

    printf(&quot;Bitte geben Sie eine Zahl ein : &quot;);
    scanf(&quot;%d&quot;,&amp;i);

    n = anzahl(i);
    printf ( &quot;Die Zahl %i besteht aus %i Ziffern!\n&quot;, i, n );
}

anzahl (arg1)
{

    int zeichen;
    char buffer[100];
    sprintf(buffer, &quot;%d&quot;, arg1);

    zeichen = strlen(buffer);

    return zeichen;

}
</code></pre>
<p>und schon habe ich wieder einige Fragen:</p>
<p>1. Gibt es wirklich keine fertige C Function dafuer?</p>
<p>2. Das ganze funktioniert natuerlich nur bis zu einer bestimmten Groesse wegen de Deklaration als int, in meinem Falle bis zu 10 Ziffern. Bei Zahlen &gt; 10 Ziffern gibt das Programm aber keine Fehlermeldung, sondern eine 'Zufallszahl' zurueck. Das sieht dann so aus:</p>
<p>[root@gbs01 ncurses]# ./test<br />
Bitte geben Sie eine Zahl ein : 1234567890<br />
Die Zahl 1234567890 besteht aus 10 Ziffern!</p>
<p>[root@gbs01 ncurses]# ./test<br />
Bitte geben Sie eine Zahl ein : 12345678901<br />
Die Zahl 2147483647 besteht aus 10 Ziffern!</p>
<p>Wie fange ich diese Verhalten ab, oder besser, wie erzeuge ich eine entsprechende Fehlermedung like &quot;Zu grosse Zahl eingegeben&quot;? Einfach auf die groesstmoegliche Zahl von 2147483647 (das sollte sie bei Linux wohl sein) pruefen?</p>
<p>Wie gesagt, es geht mir nur um die Funktion, nicht um main, wobei ich natuerlich auch da fuer etwaige Tipps immer dankbar bin.</p>
<p>Und bei der Gelegenheit gleich noch eine Frage: Sehe ich es richtig, dass auf einem 32bit System (hier Linux) int und long den gleichen Wertebereich haben, naemlich –2147483648 +2147483647? Wenn ja, welchen Typ nehme ich denn in meinem Beispiel, wenn ich den Wertebereich vergroessern moechte?</p>
<p>Guenther<br />
Davao City, Philippines, Planet Earth</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193828/int-nach-string-wandeln-gegenstueck-zu-atoi</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 06:35:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193828.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Sep 2007 14:52:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:01:22 GMT]]></title><description><![CDATA[<p>Mit atoi kann ich unter C eine Zahl in einen String umwandeln, fuer den Rueckweg wird der 'Trick' mittels scanf empfohlen.</p>
<p>Da liegt es fuer mich als Anfaenger natuerlich nahe scanf in eine Function zu legen, was erstens uebt und zweitens meinen Code lesbarer macht.</p>
<p>Realisiert habe ich das mal so:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main (void) {

    int i;
    int n;

    printf(&quot;Bitte geben Sie eine Zahl ein : &quot;);
    scanf(&quot;%d&quot;,&amp;i);

    n = anzahl(i);
    printf ( &quot;Die Zahl %i besteht aus %i Ziffern!\n&quot;, i, n );
}

anzahl (arg1)
{

    int zeichen;
    char buffer[100];
    sprintf(buffer, &quot;%d&quot;, arg1);

    zeichen = strlen(buffer);

    return zeichen;

}
</code></pre>
<p>und schon habe ich wieder einige Fragen:</p>
<p>1. Gibt es wirklich keine fertige C Function dafuer?</p>
<p>2. Das ganze funktioniert natuerlich nur bis zu einer bestimmten Groesse wegen de Deklaration als int, in meinem Falle bis zu 10 Ziffern. Bei Zahlen &gt; 10 Ziffern gibt das Programm aber keine Fehlermeldung, sondern eine 'Zufallszahl' zurueck. Das sieht dann so aus:</p>
<p>[root@gbs01 ncurses]# ./test<br />
Bitte geben Sie eine Zahl ein : 1234567890<br />
Die Zahl 1234567890 besteht aus 10 Ziffern!</p>
<p>[root@gbs01 ncurses]# ./test<br />
Bitte geben Sie eine Zahl ein : 12345678901<br />
Die Zahl 2147483647 besteht aus 10 Ziffern!</p>
<p>Wie fange ich diese Verhalten ab, oder besser, wie erzeuge ich eine entsprechende Fehlermedung like &quot;Zu grosse Zahl eingegeben&quot;? Einfach auf die groesstmoegliche Zahl von 2147483647 (das sollte sie bei Linux wohl sein) pruefen?</p>
<p>Wie gesagt, es geht mir nur um die Funktion, nicht um main, wobei ich natuerlich auch da fuer etwaige Tipps immer dankbar bin.</p>
<p>Und bei der Gelegenheit gleich noch eine Frage: Sehe ich es richtig, dass auf einem 32bit System (hier Linux) int und long den gleichen Wertebereich haben, naemlich –2147483648 +2147483647? Wenn ja, welchen Typ nehme ich denn in meinem Beispiel, wenn ich den Wertebereich vergroessern moechte?</p>
<p>Guenther<br />
Davao City, Philippines, Planet Earth</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375371</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:01:22 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:18:12 GMT]]></title><description><![CDATA[<p>Die Anzahl der Zeichen einer Zahl lassen sich viel leichter ermitteln.</p>
<p>Teile deine Zahl einfach durch Zehn und runde nach unten. Also die normale Integer-Division durch 10. Zähle, wie oft du das machen kannst, bis 0 raus kommt. Die Anzahl der Stellen ist dann die Anzahl der Divisionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375390</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:21:07 GMT]]></title><description><![CDATA[<p>du kannst <a href="http://www.cplusplus.com/reference/clibrary/cstdlib/itoa.html" rel="nofollow">itoa</a> nutzen.</p>
<p>mfg,<br />
julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375395</guid><dc:creator><![CDATA[Julian__]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:21:07 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:29:29 GMT]]></title><description><![CDATA[<p>snprintf() ist die C-Funktion die für diese Art der Unwandlung zuständig ist.</p>
<p>Da du im C++ Forum gefragt hast nehme ich an, dass du aber eigentlich mit C++ arbeitest, dann solltest du die stringstreams verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375400</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:30:56 GMT]]></title><description><![CDATA[<p>ProgChild schrieb:</p>
<blockquote>
<p>Teile deine Zahl einfach durch Zehn und runde nach unten. Also die normale Integer-Division durch 10. Zähle, wie oft du das machen kannst, bis 0 raus kommt. Die Anzahl der Stellen ist dann die Anzahl der Divisionen.</p>
</blockquote>
<p>Davon habe ich schon mal gehoert, hab's aber nicht begriffen. Wenn ich die Zahl 4711 durch 10 dividiere kommt doch 471 raus, richtig waere aber 4.</p>
<p>Wo stehe ich denn da auf'm Schlauch?</p>
<p>Sorry, ich uebe mich heute schon wieder seit mehr als 10 Stunden in C/C++, vieleicht solte ich auch einfach mal 'ne Pause machen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375402</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:34:11 GMT]]></title><description><![CDATA[<p>Da du hier im C++-Teil des Forums schreibst, gehe ich auch mal davon aus, dass du ein C++-Programm schreiben willst.</p>
<p>Für Ein- und Ausgabe verwendet man cin und cout (resp. cerr für Fehler und clog für Logs).</p>
<p>Folgender Code-Schnipsel sollte dich auf den richtigen Weg bringen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;	// Für Ein- und Ausgabe
using namespace std;

int main(int argc, char** args)
	{
		cout &lt;&lt; &quot;Bitte geben Sie eine Zahl ein: &quot; &lt;&lt; flush;

		int i;		
		if(!(cin &gt;&gt; i)) {
			cerr &lt;&lt; &quot;Something went wrong!&quot; &lt;&lt; endl;
		}

		cout &lt;&lt; endl &lt;&lt; i &lt;&lt; endl;

		return 0;
	}
</code></pre>
<p><strong>cin</strong> kümmert sich hier um die Eingabe. Wenn hier irgendwas nicht ganz korrekt abgelaufen ist (zum Beispiel auch der Überlauf) wird <strong>false</strong> zurückgegeben. <strong>cin</strong> kümmert sich direkt um die Typkonvertierung (const char* nach int) und liefert auch einige Fehler-Flags, die mir aber nun nicht ad hoc einfallen wollen.</p>
<p>Für die Stellenberechnung kannst du die oben bereits erwähnten Verfahrensweisen verwenden.</p>
<p>Die Obergrenzen der einzelnen Datentypen kannst du dem Standard-Header <strong>climits</strong> entnehmen.</p>
<p>Grüße...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375406</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:42:32 GMT]]></title><description><![CDATA[<p>gboelter schrieb:</p>
<blockquote>
<p>Davon habe ich schon mal gehoert, hab's aber nicht begriffen. Wenn ich die Zahl 4711 durch 10 dividiere kommt doch 471 raus, richtig waere aber 4.</p>
<p>Wo stehe ich denn da auf'm Schlauch?</p>
</blockquote>
<p>Du musst noch ein paar mal öfter dividieren und zählen, wie oft <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>
<pre><code>Eingabe:
x = Eine Zahl

Ausgabe: 
Anzahl der Stellen von x

stellen = 0
solange [latex]x \not= 0[/latex]
   [latex]x =  \left\lfloor \frac{x}{10} \right\rfloor [/latex]
   stellen = stellen + 1

gib stellen aus
</code></pre>
<p>Bedeutet im Beispiel</p>
<pre><code>x = 4711, stellen = 0
x = 471,  stellen = 1
x = 47,   stellen = 2
x = 4,    stellen = 3
x = 0,    stellen = 4
</code></pre>
<p>Soweit verständlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375413</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to int nach string wandeln - Gegenstueck zu atoi on Sun, 30 Sep 2007 15:48:26 GMT]]></title><description><![CDATA[<p>Ok, da ist jetzt gerade der Groschen bei mir gefallen. Und sorry fuer den Code, da war wirklich noch etwas viel C drin, aber es ging mir eben auch nicht darum, wie ich das programmiere sondern nur um das Verstaendnis.</p>
<p>Ich danke Euch fuer die schnelle Hilfe. Irgendwann kann ich mich bestimmt mal revanchieren.</p>
<p>Guenther</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1375422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1375422</guid><dc:creator><![CDATA[gboelter]]></dc:creator><pubDate>Sun, 30 Sep 2007 15:48:26 GMT</pubDate></item></channel></rss>