<?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[Float in String, Stringlänge und suchen in Strings]]></title><description><![CDATA[<p>Hallo, ich habe eine Funktion geschrieben die kontrollieren soll, ob die Eingaben in ein Textfeld der Vorgabe entsprechen. Beim überprüfen der Floatwerte die in String konvertiert wurden macht das Programm aber nicht was es eigentlich sollte...</p>
<p>Beispielsweise sagt er beim eingeben von &quot;234&quot; (Beispiel!), dass Durchschnittsgeschwindigkeit maximal 5 Vorkommastellen haben darf (obwohl es ja erfüllt ist). Ähnlich ist es mit Nachkommastellen. Auffallend ist, dass das Problem eigentlich nur beim 2. Floatwert (Durchschnittsgeschwindigkeit) auftritt und nicht beim 1. (Entfernung). Selbst wenn ich beide Werte gleich habe tritt das Problem nur beim 2. auf. Wahrscheinlich liegt es in der Konvertierung der Floats in String oder so ähnlich. Ich weiß nicht mehr weiter... zumal die Berechnungen bei beiden Werten identisch sind. Ich hoffe jemand kann helfen. Hier ist der Code der Funktion:</p>
<pre><code class="language-cpp">// *** check_eingabe ueberprueft ob die eingegebenen Werte der Vorgabe entsprechen *** //
bool check_eingabe(Route &amp;r) {
     std::string o1 = r.ort1();
     std::string o2 = r.ort2();
     float ef = r.entfernung();
     float dgf = r.durchschnittsgeschwindigkeit();
     std::ostringstream os; //wandelt die float Zahlen in Strings um
     os &lt;&lt; ef; //Schreibt Entfernung als float in den Stream...
     std::string e = os.str(); //schreibt Entfernung als String aus dem Stream
     os &lt;&lt; dgf;
     std::string dg = os.str();
     //Testet Start- und Zielort auf korrekte Stringlaenge
     if(o1.size() == 0) {message(&quot;Es muss ein Startort eingegben werden!&quot;); return false;}
     if(o1.size() &gt; 30) {message(&quot;Der Startort hat zu viele Zeichen!&quot;); return false;}
     if(o2.size() == 0) {message(&quot;Es muss ein Zielort eingegben werden!&quot;); return false;}
     if(o2.size() &gt; 30) {message(&quot;Der Zielort hat zu viele Zeichen!&quot;); return false;}
     //Entfernung und Durchschnittsgeschwindigkeit muessen groesser als Null sein
     if(ef &lt;= 0) {message(&quot;Die Entfernung muss groesser als Null sein!&quot;); return false;}
     if(dgf &lt;= 0) {message(&quot;Die Durchschnittsgeschwindigkeit muss groesser als Null sein!&quot;); return false;}
     //Wenn Entfernung und Durchschnittsgeschwindigkeit keine Nachkommastellen haben, duerfen sie maximal 5 Zeichen lang sein
     if(e.find(&quot;.&quot;) == std::string::npos and e.size() &gt; 5) {message(&quot;Entfernung: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     if(dg.find(&quot;.&quot;) == std::string::npos and dg.size() &gt; 5) {message(&quot;Durchschnittsgeschwindigkeit: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     //Wenn Entfernung und Durchschnittsgeschwindigkeit Nachkommastellen haben, darf die Kommastelle maximal an Position 5 (zaehlt ab 0) kommen
     if(e.find(&quot;.&quot;) != std::string::npos and e.find(&quot;.&quot;) &gt; 5) {message(&quot;Entfernung: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     if(dg.find(&quot;.&quot;) != std::string::npos and dg.find(&quot;.&quot;) &gt; 5) {message(&quot;Durchschnittsgeschwindigkeit: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     //Entfernung und Durchschnittsgeschwindigkeit duerfen maximal 2 Nachkommastellen haben
     if(e.find(&quot;.&quot;) != std::string::npos and (e.size() - e.find(&quot;.&quot;) - 1) &gt; 2) {message(&quot;Entfernung: Es sind maximal 2 Nachkommastellen erlaubt!&quot;); return false;}
     if(dg.find(&quot;.&quot;) != std::string::npos and (dg.size() - dg.find(&quot;.&quot;) - 1) &gt; 2) {message(&quot;Durchschnittsgeschwindigkeit: Es sind maximal 2 Nachkommastellen erlaubt!&quot;); return false;}
     return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/176471/float-in-string-stringlänge-und-suchen-in-strings</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 14:41:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176471.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Mar 2007 15:46:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Float in String, Stringlänge und suchen in Strings on Wed, 21 Mar 2007 15:46:37 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Funktion geschrieben die kontrollieren soll, ob die Eingaben in ein Textfeld der Vorgabe entsprechen. Beim überprüfen der Floatwerte die in String konvertiert wurden macht das Programm aber nicht was es eigentlich sollte...</p>
<p>Beispielsweise sagt er beim eingeben von &quot;234&quot; (Beispiel!), dass Durchschnittsgeschwindigkeit maximal 5 Vorkommastellen haben darf (obwohl es ja erfüllt ist). Ähnlich ist es mit Nachkommastellen. Auffallend ist, dass das Problem eigentlich nur beim 2. Floatwert (Durchschnittsgeschwindigkeit) auftritt und nicht beim 1. (Entfernung). Selbst wenn ich beide Werte gleich habe tritt das Problem nur beim 2. auf. Wahrscheinlich liegt es in der Konvertierung der Floats in String oder so ähnlich. Ich weiß nicht mehr weiter... zumal die Berechnungen bei beiden Werten identisch sind. Ich hoffe jemand kann helfen. Hier ist der Code der Funktion:</p>
<pre><code class="language-cpp">// *** check_eingabe ueberprueft ob die eingegebenen Werte der Vorgabe entsprechen *** //
bool check_eingabe(Route &amp;r) {
     std::string o1 = r.ort1();
     std::string o2 = r.ort2();
     float ef = r.entfernung();
     float dgf = r.durchschnittsgeschwindigkeit();
     std::ostringstream os; //wandelt die float Zahlen in Strings um
     os &lt;&lt; ef; //Schreibt Entfernung als float in den Stream...
     std::string e = os.str(); //schreibt Entfernung als String aus dem Stream
     os &lt;&lt; dgf;
     std::string dg = os.str();
     //Testet Start- und Zielort auf korrekte Stringlaenge
     if(o1.size() == 0) {message(&quot;Es muss ein Startort eingegben werden!&quot;); return false;}
     if(o1.size() &gt; 30) {message(&quot;Der Startort hat zu viele Zeichen!&quot;); return false;}
     if(o2.size() == 0) {message(&quot;Es muss ein Zielort eingegben werden!&quot;); return false;}
     if(o2.size() &gt; 30) {message(&quot;Der Zielort hat zu viele Zeichen!&quot;); return false;}
     //Entfernung und Durchschnittsgeschwindigkeit muessen groesser als Null sein
     if(ef &lt;= 0) {message(&quot;Die Entfernung muss groesser als Null sein!&quot;); return false;}
     if(dgf &lt;= 0) {message(&quot;Die Durchschnittsgeschwindigkeit muss groesser als Null sein!&quot;); return false;}
     //Wenn Entfernung und Durchschnittsgeschwindigkeit keine Nachkommastellen haben, duerfen sie maximal 5 Zeichen lang sein
     if(e.find(&quot;.&quot;) == std::string::npos and e.size() &gt; 5) {message(&quot;Entfernung: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     if(dg.find(&quot;.&quot;) == std::string::npos and dg.size() &gt; 5) {message(&quot;Durchschnittsgeschwindigkeit: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     //Wenn Entfernung und Durchschnittsgeschwindigkeit Nachkommastellen haben, darf die Kommastelle maximal an Position 5 (zaehlt ab 0) kommen
     if(e.find(&quot;.&quot;) != std::string::npos and e.find(&quot;.&quot;) &gt; 5) {message(&quot;Entfernung: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     if(dg.find(&quot;.&quot;) != std::string::npos and dg.find(&quot;.&quot;) &gt; 5) {message(&quot;Durchschnittsgeschwindigkeit: Es sind maximal 5 Vorkommastellen erlaubt!&quot;); return false;}
     //Entfernung und Durchschnittsgeschwindigkeit duerfen maximal 2 Nachkommastellen haben
     if(e.find(&quot;.&quot;) != std::string::npos and (e.size() - e.find(&quot;.&quot;) - 1) &gt; 2) {message(&quot;Entfernung: Es sind maximal 2 Nachkommastellen erlaubt!&quot;); return false;}
     if(dg.find(&quot;.&quot;) != std::string::npos and (dg.size() - dg.find(&quot;.&quot;) - 1) &gt; 2) {message(&quot;Durchschnittsgeschwindigkeit: Es sind maximal 2 Nachkommastellen erlaubt!&quot;); return false;}
     return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1249895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249895</guid><dc:creator><![CDATA[winfer]]></dc:creator><pubDate>Wed, 21 Mar 2007 15:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to Float in String, Stringlänge und suchen in Strings on Wed, 21 Mar 2007 15:59:32 GMT]]></title><description><![CDATA[<p>Geh mal in den Debugger und guck dir an was nach</p>
<pre><code class="language-cpp">std::string e = os.str();
os &lt;&lt; dgf;
std::string dg = os.str();
</code></pre>
<p>in dg steht ... solltest eigentlich an der stelle was vergessen haben ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1249906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1249906</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 21 Mar 2007 15:59:32 GMT</pubDate></item><item><title><![CDATA[Reply to Float in String, Stringlänge und suchen in Strings on Wed, 21 Mar 2007 18:19:06 GMT]]></title><description><![CDATA[<p>Hallo, also wie das mit dem Debugger funktioniert weiß ich irgendwie jetz garnich so genau (das Programm is mit fltk und läuft nich wie ne normale Konsolenanwendung Schritt für Schritt, darum is das mit der Ablaufverfolgung irgendwie nich so...). Naja, auch egal... Denke mal es liegt daran, dass man die Stream Variable erst irgendwie leeren muss. Aber weiß nich wie das geht. Hatte das mit der Konvertierung so im web gefunden und da war es nur für eine Variable. Habe es jetzt so gelöst, dass ich 2 Streamvariablen angelegt hab:</p>
<pre><code class="language-cpp">std::ostringstream os1, os2; //wandelt die float Zahlen in Strings um
     os1 &lt;&lt; ef; //Schreibt Entfernung als float in den Stream...
     std::string e = os1.str(); //schreibt Entfernung als String aus dem Stream
     os2 &lt;&lt; dgf;
     std::string dg = os2.str();
</code></pre>
<p>Geht es vielleicht auch besser, oder is das ok so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250008</guid><dc:creator><![CDATA[winfer]]></dc:creator><pubDate>Wed, 21 Mar 2007 18:19:06 GMT</pubDate></item><item><title><![CDATA[Reply to Float in String, Stringlänge und suchen in Strings on Wed, 21 Mar 2007 20:20:48 GMT]]></title><description><![CDATA[<p>Funktioniert denn jetzt der Rest deiner Funktion?</p>
<pre><code class="language-cpp">std::ostringstream float_to_string;
float_to_string &lt;&lt; ef; 
std::string string_e = float_to_string.str();
float_to_string.clear(); // &lt;= !!!
float_to_string.str(&quot;&quot;); // &lt;= !!!
float_to_string &lt;&lt; dgf;
std::string string_d = float_to_string.str();
</code></pre>
<p>so kannst du den leeren... einfach den Inhalt auf &quot;&quot; setzen <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 alle Fehlerflags usw löschen ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250074</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 21 Mar 2007 20:20:48 GMT</pubDate></item><item><title><![CDATA[Reply to Float in String, Stringlänge und suchen in Strings on Sat, 24 Mar 2007 09:21:24 GMT]]></title><description><![CDATA[<p>Hallo, also mit der Variante die ich vorhin gepostet hatte hat es funktioniert. Denke mal ist auch ok das so zu implementieren. Ist vom Aufwand ja kaum ein Unterschied. Trotzdem danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1251516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1251516</guid><dc:creator><![CDATA[winfer]]></dc:creator><pubDate>Sat, 24 Mar 2007 09:21:24 GMT</pubDate></item></channel></rss>