<?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[Ist String eine Zahl?]]></title><description><![CDATA[<p>Wie kann ich testen, ob ein gegebener String<br />
a) eine ganzzahl ist?<br />
b) eine Fließkommazahl ist?</p>
<p>In Delphi macht man das per StrToFloat bzw StrToInt. Beide Funktionen werfen eine exception wenn die Konvertierung fehlschlägt. Ich habe beide Funktionen in C++ nachgebaut. Nur basieren die auf &quot;atoi&quot; und &quot;atof&quot;. Diese Funktionen sind aber unverwüstlich, und liefern einfach 0 wenn was nicht geklappt hat. Das hilft mir nicht weiter, da 0 ja auch bei einer Korrekten eingabe das Ergebnis sein könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/137011/ist-string-eine-zahl</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 15:54:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/137011.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Feb 2006 19:39:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist String eine Zahl? on Tue, 14 Feb 2006 19:39:42 GMT]]></title><description><![CDATA[<p>Wie kann ich testen, ob ein gegebener String<br />
a) eine ganzzahl ist?<br />
b) eine Fließkommazahl ist?</p>
<p>In Delphi macht man das per StrToFloat bzw StrToInt. Beide Funktionen werfen eine exception wenn die Konvertierung fehlschlägt. Ich habe beide Funktionen in C++ nachgebaut. Nur basieren die auf &quot;atoi&quot; und &quot;atof&quot;. Diese Funktionen sind aber unverwüstlich, und liefern einfach 0 wenn was nicht geklappt hat. Das hilft mir nicht weiter, da 0 ja auch bei einer Korrekten eingabe das Ergebnis sein könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994254</guid><dc:creator><![CDATA[Anfänger06]]></dc:creator><pubDate>Tue, 14 Feb 2006 19:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Tue, 14 Feb 2006 19:42:28 GMT]]></title><description><![CDATA[<p>Anfänger06 schrieb:</p>
<blockquote>
<p>Wie kann ich testen, ob ein gegebener String<br />
a) eine ganzzahl ist?<br />
b) eine Fließkommazahl ist?</p>
<p>In Delphi macht man das per StrToFloat bzw StrToInt. Beide Funktionen werfen eine exception wenn die Konvertierung fehlschlägt. Ich habe beide Funktionen in C++ nachgebaut. Nur basieren die auf &quot;atoi&quot; und &quot;atof&quot;. Diese Funktionen sind aber unverwüstlich, und liefern einfach 0 wenn was nicht geklappt hat. Das hilft mir nicht weiter, da 0 ja auch bei einer Korrekten eingabe das Ergebnis sein könnte.</p>
</blockquote>
<p>Genau zu diesem Thema gibt es einen Thread in der Faq :). (Siehe Einmal String nahch Zahl und zurück o.ä.).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994256</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Tue, 14 Feb 2006 19:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Tue, 14 Feb 2006 20:09:15 GMT]]></title><description><![CDATA[<p>Er will gar nix konvertieren, er will nur wissen obs ne Zahl ist oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994282</guid><dc:creator><![CDATA[KFlash]]></dc:creator><pubDate>Tue, 14 Feb 2006 20:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Tue, 14 Feb 2006 20:09:08 GMT]]></title><description><![CDATA[<p>die Funktionen kann man ziemlich einfach selbst programmieren:</p>
<pre><code class="language-cpp">bool IsInteger(const string&amp; input) { return false; }
bool IsFloat(const string&amp; input) { return false; }
</code></pre>
<p>(scnr)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994284</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 14 Feb 2006 20:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Tue, 14 Feb 2006 20:16:07 GMT]]></title><description><![CDATA[<p>Danke das hilft mir wirklich weiter. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/994290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994290</guid><dc:creator><![CDATA[Anfänger06]]></dc:creator><pubDate>Tue, 14 Feb 2006 20:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 01:35:28 GMT]]></title><description><![CDATA[<p>Kann mir hier doch noch jemand weiterhelfen? Sitz jetzt schon 11h an dem Projekt. Das Problem besteht aber immer noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994450</guid><dc:creator><![CDATA[Anfänger06]]></dc:creator><pubDate>Wed, 15 Feb 2006 01:35:28 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 07:28:33 GMT]]></title><description><![CDATA[<p>KFlash schrieb:</p>
<blockquote>
<p>Er will gar nix konvertieren, er will nur wissen obs ne Zahl ist oder nicht.</p>
</blockquote>
<p>Trotzdem kannst du über das konvertieren (mit geeigneten Funktionen/Klassen/etc. (&quot;Geeignet&quot; heißt hier = auf Fehler nicht mit der Rückgabe von 0 o.ä. reagieren)) feststellen, ob der String eine Zahl enthält.</p>
<p>Dies ist der Weg für faule, die sich keine eigene Funktion is...() schreiben möchten (Afaik gibt es nämlich keine derartige Funktion in der Standard-Lib) und bei denen die Leistung für nichts wichtigeres benötigt- oder aber wenn der Zahlentyp später irgendwann noch mal gebraucht wird. :).</p>
<p>Du kannst eine Funktion is...() für std::strings allerdings sehr einfach selber bauen:</p>
<pre><code class="language-cpp">#include &lt;cctype&gt; // für std::isdigit(int )

bool is_integer(const string&amp; rhs)
{
    for(size_t i = 0; i &lt; rhs.size(); ++i)
        if(!std::isdigit(rhs[i]))
            return false;
    return true;
}
</code></pre>
<p>(Wobei man hier eventuell noch Over/Underflow-Checks einbauen sollte).</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994480</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Wed, 15 Feb 2006 07:28:33 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 07:34:32 GMT]]></title><description><![CDATA[<p>Also ich würde für die Fehlerüberprüfung nicht die &quot;abgespeckten&quot; Funktionen verwenden, die das unterdrücken, sondern die ausführlichere Variante strtod() bzw. strtol() (denen gibst du als zweiten Parameter die Adresse eines char*, in den sie das Ende der erkannten Zahl einspeichern - wenn da was anderes als das Stringende drinsteht, hattest du einen Fehler)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994485</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 07:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 08:12:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;sstream&gt;

...

bool isInt( const std::string&amp; s)
{
   std::istringstream iss( s);
   int i;
   return (iss &gt;&gt; i);
}
</code></pre>
<p>Berücksichtigt Vorzeichen, berücksichtigt Locales (Unterschied , und . , Tausender-Trennzeichen), berücksichtigt wissenschaftliche Notation, frisst unnötige Whitespaces. Was will man mehr?</p>
<p>Will man korrektes Verhalten selber nachbilden, programmiert man sich 'nen Wolf. Und es ist alles schon da. Immer die Bibliotheksfunktionen benutzen, wenn man kann. Die Funktion eignet sich übrigens prima für ein Template.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994506</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 15 Feb 2006 08:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 08:52:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
using namespace std;

bool isInt( const std::string&amp; s)
{
   std::istringstream iss( s);
   int i;
   return (iss &gt;&gt; i);
}

int main ()
{
   cout &lt;&lt; isInt(&quot;0.5z&quot;) &lt;&lt; endl;
   cin.get();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/994533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994533</guid><dc:creator><![CDATA[true?]]></dc:creator><pubDate>Wed, 15 Feb 2006 08:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 09:12:58 GMT]]></title><description><![CDATA[<p>Hm da ist was dran. <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="😃"
    /> Der Parsevorgang sollte eigentlich nicht mit dem nächsten ungültigen Zeichen aufhören.</p>
<pre><code class="language-cpp">bool isInt( const std::string&amp; s)
{
   std::istringstream iss( s);
   int i;
   if (iss &gt;&gt; i) {
      iss &gt;&gt; std::ws;
      return iss.eof();
   }
   else {
      return false;
   }
}
</code></pre>
<p>Hmm... 5,000 wird trotzdem net erkannt. Wundert/enttäuscht mich ein bisschen von der Funktionalität der Std-Lib.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994544</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 15 Feb 2006 09:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 09:15:11 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Hmm... 5,000 wird trotzdem net erkannt. Wundert/enttäuscht mich ein bisschen von der Funktionalität der Std-Lib.</p>
</blockquote>
<p>Liegt wohl daran, daß für C++ &quot;5,000&quot; keine gültige Zahl darstellt (damit das erkannt wird, müsste man irgendwo die locale's umstellen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994548</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 15 Feb 2006 09:15:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 10:35:44 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Liegt wohl daran, daß für C++ &quot;5,000&quot; keine gültige Zahl darstellt (damit das erkannt wird, müsste man irgendwo die locale's umstellen).</p>
</blockquote>
<p>Anscheinend wird das numpunct facet nicht einfach so verwendet, wie ich es jetzt erwartet hätte. Muss ich zuhause mal in Ruhe nachlesen wie das geht. Ich vermute mal es geht, es ist nur ein Verständnisproblem (meinerseits).</p>
<p>Edit:<br />
Des Rätsels Lösung: Es liegt tatsächlich an den Locales. Das Standard C Locale sieht kein Tausender-Trennzeichen vor. Schreibt man dagegen zu Programmbeginn z.B. std::locale::global( std::locale( &quot;de_DE&quot;)); so wird . als 1000er Trennzeichen benutzt und , als Dezimaltrennzeichen. Leider sind die Locale-Strings nicht standardisiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/994587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994587</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 15 Feb 2006 10:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 10:29:22 GMT]]></title><description><![CDATA[<p>Ich will ja nix sagen, aber o.g. Beispiel erkennt bei mir auch &quot;5.000&quot; nicht als Zahl. Wäre evtl. nicht schlecht für Kommazahlen double oder float zu verwenden <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/994619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994619</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 15 Feb 2006 10:29:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 10:39:20 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ich will ja nix sagen, aber o.g. Beispiel erkennt bei mir auch &quot;5.000&quot; nicht als Zahl. Wäre evtl. nicht schlecht für Kommazahlen double oder float zu verwenden <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>
</blockquote>
<p>Dann solltest du &quot;5.000&quot; auch nicht in eine Funktion namens isInt stecken. <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="😉"
    /> Und eine Funktion isInt sollte natürlich nicht double oder float verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994635</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 15 Feb 2006 10:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 10:56:56 GMT]]></title><description><![CDATA[<p>Moment mal, DU hast unter der Funktion &quot;bool isInt(const std::string&amp;)&quot; geschrieben &quot;Hmm... 5,000 wird trotzdem net erkannt.&quot; :p</p>
<p>Oder meinst Du das , als Tausender-Trennzeichen <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>Wahrsager bin ich nicht <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/994659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994659</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 15 Feb 2006 10:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 12:09:32 GMT]]></title><description><![CDATA[<p>Hallo Anfänger06</p>
<p>Anfänger06 schrieb:</p>
<blockquote>
<p>Wie kann ich testen, ob ein gegebener String<br />
a) eine ganzzahl ist?<br />
b) eine Fließkommazahl ist?</p>
</blockquote>
<pre><code class="language-cpp">bool IsNumber( char * string, bool AcceptFloat )
{
  if( !string )              // Kein String?
    return false;            // =&gt; keine Zahl.

  while( *string )           // solange der String nicht zuende ist
  {
    if( *string &lt; '0' || *string &gt; '9' )       // wenn's keine Ziffer ist      // Edit.
      if( *string == '.' &amp;&amp; AcceptFloat )      // darfs vielleicht ein Punkt sein?
        AcceptFloat = false;                   // aber höchstens ein Punkt
      else return false;                       // sonst ist es kein gültiges Int/float

    string++;                                  // nächstes Zeichen soll geprüft werden
  }

  return true;                                 // Der String wurde komplett geparst und es wurden nur gültige Zeichen gefunden.
}
</code></pre>
<p>Ich gehe davon aus, dass es funktioniert, ich hab's nicht getestet.<br />
EDIT: aus &amp;&amp; wurde ||</p>
<blockquote>
<p>In Delphi macht man das per StrToFloat bzw StrToInt. Beide Funktionen werfen eine exception wenn die Konvertierung fehlschlägt.</p>
</blockquote>
<p>Aha... verstehe... macht man das in Delphi so?</p>
<p>Wenn Du wissen willst, ob an Deinem Auto die Bremsen funktionieren, fährst Du auf die Autobahn, richtig?<br />
Sollte Dein Leben eine Exception werfen, weißt Du, dass mit diesen Bremsen nicht zu rechnen ist.</p>
<p>Dieses Vorgehen ist bei manchen Algorithmen schneller - insbesondere, wenn man mit nahezu 100%iger Sicherheit davon ausgehen kann, dass die Bremsen funktionieren. Ich lasse meine Bremsen auch nicht vor jeder Autobahnfahrt prüfen. Aber wenn ich den Verdacht habe, dann finden sich bestimmt andere Möglichkeiten, das zu testen.<br />
Sogar wenn man Delphi programmiert, kann man es anständig machen.</p>
<blockquote>
<p>Ich habe beide Funktionen in C++ nachgebaut. Nur basieren die auf &quot;atoi&quot; und &quot;atof&quot;. Diese Funktionen sind aber unverwüstlich, und liefern einfach 0 wenn was nicht geklappt hat. Das hilft mir nicht weiter, da 0 ja auch bei einer Korrekten eingabe das Ergebnis sein könnte.</p>
</blockquote>
<p>Das ist die richtige Funktionsweise einer Low-Level-Funktion: Übergibt der Programmierer Mist, geht der Mist umgehend an den Absender zurück. Aber eine Low-Level-Funktion meckert nicht, sondern erträgt auch den Anfänger wie ein Mann.</p>
<p>Gewöhn Dir an, Dinge nur dann zu tun, wenn Du weißt, dass sie funktionieren.<br />
Das erspart Dir a) die Fehlersuche, wenn Du was programmiert hast und nicht weißt warum Du es so programmiert hast - in C++ solltest Du erst wissen, warum Du etwas schreibst.<br />
Und es erspart b) die Fehlersuche, wenn irgendwer vergessen hat mit Exceptions nach Dir zu werfen. Da Du wissen solltest, was Du tust, wird in C++ häufig getan, was Du sagst - auch wenn es Unsinn ist.</p>
<p>Alternativ kann man das auch andersrum aufziehen:<br />
Ein Programm, das keine Exception wirft berechnet nicht zwangsläufig das, was Du gerne hättest. Also erwarte keine Exception, sondern überlege, wie Du die Funktion garantieren kannst. Daraus ergibt sich, dass Du im Regelfall keine Exceptions benötigst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/994677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994677</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Wed, 15 Feb 2006 12:09:32 GMT</pubDate></item><item><title><![CDATA[Reply to Ist String eine Zahl? on Wed, 15 Feb 2006 13:20:12 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/11309">@Xin</a>: Warum so kompliziert? (außerdem dürfte deine Funktion Probleme mit z.B. 1e10 haben (ja, das ist eine gültige float-Zahl)).</p>
<p>N4C3R's Lösung lässt sich problemlos auf Gleitkomma-Zahlen umschreiben, indem man statt &quot;int i&quot; einfach &quot;double i&quot; schreibt.</p>
<p>PS: Als Bonus noch ein Lösungsansatz:</p>
<pre><code class="language-cpp">bool IsNumber(const char* str)
{
  char* end;
  double d=strtod(str,&amp;end);
  return *end=='\0';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/994820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/994820</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Wed, 15 Feb 2006 13:20:12 GMT</pubDate></item></channel></rss>