<?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[Zahlenwerte aus einem String &amp;quot;filtern&amp;quot;]]></title><description><![CDATA[<p>Hallo, ich bin neu hier (mein 1. Beitrag)</p>
<p>Mein Name ist Andreas, bin 24 Jahre und<br />
Arbeite als NC-Programierer / CNC-Fräser</p>
<p>Ich fange gerade an bzw. ich versuche C++ zu lernen, und ich<br />
hoffe dass ihr mich dabei etwas unterstützen könnt.</p>
<p>Ich habe vor mir einen Postprozessor zu schreiben mit dem ich die Fräsprogramme die vom CAD-System kommen<br />
in ein NC-Steuerungs Kompatibles Format umwandeln kann. Im Klartext schaut das so aus:</p>
<p>Ich muss eine Datei öffnen und diese dann Zeilenweise auswerten, die zeile schaut ungefähr so aus:</p>
<p>N142X-342765Y31357Z36970G00</p>
<p>und diese muss ich in verschiedene Bestandteile Zerlegen</p>
<p>N142 ist unwichtig</p>
<p>-342765 soll als zahl ohne X als double in der Variable x_koord abgelegt werden<br />
31357 als double in der Variable y_koord<br />
36970 als double in der Variable z_koord</p>
<p>Nachdem die Zeile zerlegt und entsprechend zugewiesen ist wird diese verändert (koordinaten umgerechnet)<br />
und dann in eine neue Datei geschrieben. Wenn die Zeile abgeschlossen ist kommt die nächste dran !!</p>
<p>Ich hab da mal folgendes geschrieben:</p>
<pre><code class="language-cpp">string programmzeile;								// Variablendeklaration

cout &lt;&lt; &quot;Geb bitte eine NC-Programmzeile ein: &quot;;	// Textzeile einlesen:
getline ( cin, programmzeile);

string x_edit = programmzeile;						// Programmzeile in die Variable x_edit kopieren
int xanfang = x_edit.rfind(&quot;x&quot;)+1;					// Anfang der X-Koordinate suchen und X-Buchstabe entfernen
x_edit = x_edit.erase(0,xanfang);					// Zeilenanfang bis X-Koordinate löschen
int satzlaenge = x_edit.length()-1;					// Länge der restlichen Zeile bestimmen
int xende = x_edit.rfind(&quot;y&quot;);						// Anfang der Y-Koordinate suchen
x_edit = x_edit.erase(xende,satzlaenge);			// von Anfang der Y-Koordinate bis Zeilenende löschen
double x_koord = atof (x_edit.c_str());				// X-Koordinate von String in Double umwandeln
x_koord = x_koord / 1000;							// 1000stel in ganze MM umrechnen
cout.precision(3);									// Genauigkeit auf 3 Stellen setzen
cout &lt;&lt; showpoint &lt;&lt; fixed &lt;&lt; showpos				// X-Koordinate ausgeben mit 3 Nachkommastellen und
	 &lt;&lt; &quot;\n\nX-Koordinate: &quot; &lt;&lt; x_koord &lt;&lt; &quot;\n\n&quot;;	// positiven Vorzeichen
</code></pre>
<p>Soweit sogut, Wenn ich die Zeile &quot;N142X-342765Y31357Z36970G00&quot; eingebe erhalte ich als Rückgabewert: -342.765 !! So soll´s sein !!</p>
<p>Ich habe jetzt nur ein Problem festzustellen wann die X-Koordinate zuende ist !! Ich hab´s jetzt so gelöst,<br />
dass am Anfang der Y-Koordinate schluss ist, aber es gibt fälle wo´s kein Y mehr gibt, und dann kommt ein Fehler !!</p>
<p>Jetzt zur eigentlichen Frage:</p>
<p>Gibt es eine andere Möglichkeit das ende der X-Koordinate zu ermitteln ??<br />
z.B. &quot;Lese ab &quot;x&quot; alle Zahlen und beim nächsten Zeichen ist schluss&quot;oder so ähnlich</p>
<p>Oder gibt´s noch ne ganz andere Möglichkeit die Koordinaten aus der Zeile zu filtern ??</p>
<p>Ich hoffe dass war jetzt nicht zuviel auf einmal <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="🙄"
    /> <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>Gruß Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188822/zahlenwerte-aus-einem-string-quot-filtern-quot</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 05:21:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188822.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Aug 2007 17:21:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 17:21:31 GMT]]></title><description><![CDATA[<p>Hallo, ich bin neu hier (mein 1. Beitrag)</p>
<p>Mein Name ist Andreas, bin 24 Jahre und<br />
Arbeite als NC-Programierer / CNC-Fräser</p>
<p>Ich fange gerade an bzw. ich versuche C++ zu lernen, und ich<br />
hoffe dass ihr mich dabei etwas unterstützen könnt.</p>
<p>Ich habe vor mir einen Postprozessor zu schreiben mit dem ich die Fräsprogramme die vom CAD-System kommen<br />
in ein NC-Steuerungs Kompatibles Format umwandeln kann. Im Klartext schaut das so aus:</p>
<p>Ich muss eine Datei öffnen und diese dann Zeilenweise auswerten, die zeile schaut ungefähr so aus:</p>
<p>N142X-342765Y31357Z36970G00</p>
<p>und diese muss ich in verschiedene Bestandteile Zerlegen</p>
<p>N142 ist unwichtig</p>
<p>-342765 soll als zahl ohne X als double in der Variable x_koord abgelegt werden<br />
31357 als double in der Variable y_koord<br />
36970 als double in der Variable z_koord</p>
<p>Nachdem die Zeile zerlegt und entsprechend zugewiesen ist wird diese verändert (koordinaten umgerechnet)<br />
und dann in eine neue Datei geschrieben. Wenn die Zeile abgeschlossen ist kommt die nächste dran !!</p>
<p>Ich hab da mal folgendes geschrieben:</p>
<pre><code class="language-cpp">string programmzeile;								// Variablendeklaration

cout &lt;&lt; &quot;Geb bitte eine NC-Programmzeile ein: &quot;;	// Textzeile einlesen:
getline ( cin, programmzeile);

string x_edit = programmzeile;						// Programmzeile in die Variable x_edit kopieren
int xanfang = x_edit.rfind(&quot;x&quot;)+1;					// Anfang der X-Koordinate suchen und X-Buchstabe entfernen
x_edit = x_edit.erase(0,xanfang);					// Zeilenanfang bis X-Koordinate löschen
int satzlaenge = x_edit.length()-1;					// Länge der restlichen Zeile bestimmen
int xende = x_edit.rfind(&quot;y&quot;);						// Anfang der Y-Koordinate suchen
x_edit = x_edit.erase(xende,satzlaenge);			// von Anfang der Y-Koordinate bis Zeilenende löschen
double x_koord = atof (x_edit.c_str());				// X-Koordinate von String in Double umwandeln
x_koord = x_koord / 1000;							// 1000stel in ganze MM umrechnen
cout.precision(3);									// Genauigkeit auf 3 Stellen setzen
cout &lt;&lt; showpoint &lt;&lt; fixed &lt;&lt; showpos				// X-Koordinate ausgeben mit 3 Nachkommastellen und
	 &lt;&lt; &quot;\n\nX-Koordinate: &quot; &lt;&lt; x_koord &lt;&lt; &quot;\n\n&quot;;	// positiven Vorzeichen
</code></pre>
<p>Soweit sogut, Wenn ich die Zeile &quot;N142X-342765Y31357Z36970G00&quot; eingebe erhalte ich als Rückgabewert: -342.765 !! So soll´s sein !!</p>
<p>Ich habe jetzt nur ein Problem festzustellen wann die X-Koordinate zuende ist !! Ich hab´s jetzt so gelöst,<br />
dass am Anfang der Y-Koordinate schluss ist, aber es gibt fälle wo´s kein Y mehr gibt, und dann kommt ein Fehler !!</p>
<p>Jetzt zur eigentlichen Frage:</p>
<p>Gibt es eine andere Möglichkeit das ende der X-Koordinate zu ermitteln ??<br />
z.B. &quot;Lese ab &quot;x&quot; alle Zahlen und beim nächsten Zeichen ist schluss&quot;oder so ähnlich</p>
<p>Oder gibt´s noch ne ganz andere Möglichkeit die Koordinaten aus der Zeile zu filtern ??</p>
<p>Ich hoffe dass war jetzt nicht zuviel auf einmal <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="🙄"
    /> <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>Gruß Andi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338743</guid><dc:creator><![CDATA[Dolzman]]></dc:creator><pubDate>Sat, 04 Aug 2007 17:21:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 18:01:42 GMT]]></title><description><![CDATA[<p>Du kannst ja das Ergebnis von der Suche nach y prüfen.<br />
wenn npos zurückgeliefert wird, gibt es kein &quot;y&quot; in deinem string ...</p>
<p>also</p>
<pre><code class="language-cpp">if(xende != std::string::npos)
  // y Koordinate ausgelesen
else  
  // keine y Koordinate eingegeben
</code></pre>
<p>EDIT://<br />
Ach ja, cin ist die Konsoleneingabe - um dateien einzulesen solltest du dir fstreams anschauen. Um durch Dateisysteme zu manöverieren ist boost::filesystem zu empfehlen ...<br />
wenn du noch Anregungen willst für Zahl=&gt;String und String=&gt;Zahl<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338757</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 18:07:52 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>das dürfte nicht gut gehen:</p>
<pre><code class="language-cpp">x_edit = x_edit.erase(xende,satzlaenge);            // von Anfang der Y-Koordinate bis Zeilenende löschen
</code></pre>
<p>Da du dann übers Ende hinausschießt. Lass satzlaenge weg und er löscht automatisch von xende bis zum sringende.</p>
<p>Wieso bentuzt du eigentlich rfind?</p>
<p>Ich würde ganz normal mit find arbeiten und mit substr meine Teilbereiche rausholen und diese dann ggf umwandeln. So wie du das momentan machst, musst du diese Prozedur ja auch für die anderen Koordinaten machen und ein y_edit und z_edit einführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338760</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:07:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 18:53:01 GMT]]></title><description><![CDATA[<p>@Checker&amp;Murckser</p>
<p>Danke erstmal, soweit fuktioniert alles :p</p>
<p>@KasF</p>
<p>Hast recht, ich muss das ganze dann noch für Y und Z auch noch hintendran hängen !!<br />
Eventuell auch noch für die Drehachsen A, B und C und dann noch G</p>
<p>Bin wie gesagt noch Anfänger, und weis auch noch nicht welche möglichkeiten<br />
mir da offen stehn !!</p>
<p>find und substr kenn ich jetzt noch nicht <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="😕"
    /><br />
Kannst du mal ne ganz einfache Zeile Posten, die ich als Vorlage benutzen kann !!</p>
<p>Muss gleich mal in meiner C++ Referenz nachschauen !!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338777</guid><dc:creator><![CDATA[Dolzman]]></dc:creator><pubDate>Sat, 04 Aug 2007 18:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 19:09:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">string text = &quot;N142X-342765Y31357Z36970G00&quot;;

size_t x_start = text.find(&quot;X&quot;), y_start = text.find(&quot;Y&quot;),
       z_start = text.find(&quot;Z&quot;);

cout &lt;&lt; text.substr(x_start + 1, y_start - x_start - 1);
</code></pre>
<p>Natürlich die find-Sachen auf npos prüfen.</p>
<p><a href="http://www.cppreference.com/cppstring/substr.html" rel="nofollow">http://www.cppreference.com/cppstring/substr.html</a><br />
<a href="http://www.cppreference.com/cppstring/find.html" rel="nofollow">http://www.cppreference.com/cppstring/find.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338782</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 04 Aug 2007 19:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 19:14:05 GMT]]></title><description><![CDATA[<p>Oder du bastelst dir eine Methode, die den String flexibel zerlegt.<br />
Stelle ich mir ungefähr so vor:</p>
<pre><code class="language-cpp">bool ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{
    // Zerlegt hier den String in die einzelnen Teile und schreibt
    //   zu jedem darin vorkommenden Buchstaben den zugehörigen Zahlenwert
    //   in die map.
}

...

string text = &quot;N142X-342765Y31357Z36970G00&quot;;
map&lt;char,double&gt; coords;
if ( ! ExtractCoords( text, coords ) )
{
    // Fehler
}
else
{
    // coords['X'] beinhaltet die x-Koordinate usw.
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1338784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338784</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 04 Aug 2007 19:14:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sat, 04 Aug 2007 22:02:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string text = &quot;N142X-342765Y31357Z36970G00&quot;;

void extract_coords(const std::string&amp; string, double&amp; x, double&amp; y, double&amp; z)
{
    std::size_t pos_x = string.find_first_of('X');
    std::size_t pos_y = string.find_first_of('Y', pos_x);
    std::size_t pos_z = string.find_first_of('Z', pos_y);
    std::size_t pos_end = string.find_first_not_of(&quot;0123456789&quot;, pos_z);
    if (pos_x == std::string::npos || pos_y == std::string::npos || pos_z == std::string::npos)
        throw std::logical_error(&quot;Invalid string!&quot;);

    std::stringstream ss(string.substr(pos_x + 1, pos_y));
    ss &gt;&gt; x;
    ss.clear();
    ss.str(&quot;&quot;);
    ss &lt;&lt; string.substr(pos_y + 1, pos_z);
    ss &gt;&gt; y;
    ss.clear();
    ss.str(&quot;&quot;);
    ss &lt;&lt; string.substr(pos_z + 1, pos_end);
    ss &gt;&gt; z;
}
</code></pre>
<p>ist aber nicht die kürzeste Lösung <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/1338839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338839</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 04 Aug 2007 22:02:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 18:26:05 GMT]]></title><description><![CDATA[<p>Ich bin nicht besonders gut mit der STL, aber das hier geht auch:</p>
<pre><code class="language-cpp">void ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{
	char last_char = '\0';
	for ( size_t i=0, last=-1, len=text.length(); i&lt;len; ++i )
	{
		if ( isalpha( text[i] ) )
		{
			char c = text[i];
			if ( last != -1 )
			{
				text[i] = '\0';
				coords[last_char] = atof( text.c_str()+last );
			}
			last_char = c;
			last = i+1;
		}
	}
	if ( last != -1 )
		coords[last_char] = atof( text.c_str()+last );
}
</code></pre>
<p>edit: Nur aus Interesse, wie kann man das elegant mit der STL machen <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/1338847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338847</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 05 Aug 2007 18:26:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 15:32:28 GMT]]></title><description><![CDATA[<p>ok, funktioniert jetzt einigermasen, jetzt versuche ich<br />
das alles in eine Funktion zu packen um diese dann in eine<br />
externe Headerdatei auszulagern, aber irgendwie will´s nich so<br />
recht funktionieren.</p>
<p>Kann ich der Funktion ein String übergeben und als<br />
Rückgabewert eine double erhalten ??</p>
<p>Ich bekomme als Rückgabewerd x_koord immer &quot;999999999999999&quot;<br />
so als wenn der String überhaupt nicht bearbeitet wird !!</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;

using namespace std;

double x_filter(string);

int main(int argc, _TCHAR* argv[])
{
	string programmzeile;								// Variablendeklaration
	double x_koord;

	cout &lt;&lt; &quot;NC-Programmzeile eingeben: &quot;;				// Textzeile einlesen:
	getline ( cin, programmzeile);

	x_koord = x_filter(programmzeile);

	cout.precision(3);									// Genauigkeit auf 3 Stellen setzen
	cout &lt;&lt; showpoint &lt;&lt; fixed &lt;&lt; showpos				// X-Koordinate ausgeben mit 3 Nachkommastellen und
		 &lt;&lt; &quot;\n\nX-Koordinate: &quot; &lt;&lt; x_koord &lt;&lt; &quot;\n\n&quot;;	// positiven Vorzeichen

	system(&quot;PAUSE&quot;);
	return 0;
}

double x_filter(string)
{
	string x_edit;
	double x_koord;									// Programmzeile in die Variable x_edit kopieren
	int xanfang = x_edit.rfind(&quot;x&quot;);				// Anfang der X-Koordinate suchen und X-Buchstabe entfernen
	if (xanfang != std::string::npos)				// Wenn kein X vorhanden ist an Verzweigungsende Springen
	{	xanfang++;
		x_edit = x_edit.erase(0,xanfang);				// Zeilenanfang bis X-Koordinate löschen
		int satzlaenge = x_edit.length()-1;				// Länge der restlichen Zeile bestimmen
		int xende = x_edit.rfind(&quot;y&quot;);					// Anfang der Y-Koordinate suchen
		if (xende != std::string::npos);				// Wenn kein Y vorhanden ist nach Z-Koordinate suchen
			else xende = x_edit.rfind(&quot;z&quot;);
		if (xende != std::string::npos);				// Wenn auch kein Z vorhanden ist nach G Suchen
			else xende = x_edit.rfind(&quot;g&quot;);
			if (xende != std::string::npos);			// Wenn auch kein G vorhanden ist dann Zeilenende nehmen
			else xende = satzlaenge+1;
		x_edit = x_edit.erase(xende,satzlaenge);		// von Ende der X-Koordinate bis Zeilenende löschen
		x_koord = atof (x_edit.c_str());				// X-Koordinate von String in Double umwandeln
		x_koord = x_koord / 1000;}						// 1000stel in ganze MM umrechnen
	else x_koord = 999999999999999;					// Wenn kein X vorhanden ist setz den wert auf 999999999999999
	return x_koord;
}
</code></pre>
<p>Was hab ich da falsch gemacht ??</p>
<p>Es geht mir jetzt nur um den richtigen Rückgabwert, die<br />
Zerlegung des String´s werde ich dann noch umschreiben, entsprechend<br />
euren vorschlägen !!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339049</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339049</guid><dc:creator><![CDATA[Dolzman]]></dc:creator><pubDate>Sun, 05 Aug 2007 15:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 15:58:19 GMT]]></title><description><![CDATA[<p>'x' != 'X' <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 class="language-cpp">if(x_edit.find('x') != string::npos || x_edit.find('X') != string::npos)
{
...
}
else ... //9999999
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339062</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 05 Aug 2007 15:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 16:49:45 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>edit: Nur aus Interesse, wie kann man das elegant mit der STL machen <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>
</blockquote>
<p>Vielleicht so:</p>
<pre><code class="language-cpp">void ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{

	char last_char = 0;
	string::iterator pos = text.end(), last_pos = text.end();

	while ( (pos = find_if(text.begin(),text.end(),isalpha)) != text.end() )
	{ 
		if( pos == text.begin() ) 
		{ 
			last_char = *pos;
			last_pos = pos; 
			*pos = 0; 

			continue; 
		}

		stringstream sstr(&quot;&quot;);
		copy(last_pos+1,pos,ostream_iterator&lt;char&gt;(sstr)); //da es blöderweise kein string::substr für iteratorn gibt

		double val = 0;
		sstr &gt;&gt; val;

		coords[last_char] = val;

		last_char = *pos;
		last_pos = pos;
		*pos = 0;
	}

}
</code></pre>
<p>Edit: gcc aus C::B will die find_if Anweisung nicht kompilieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339087</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 05 Aug 2007 16:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 17:17:28 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<pre><code class="language-cpp">copy(last_pos+1,pos,ostream_iterator&lt;char&gt;(sstr)); //da es blöderweise kein string::substr für iteratorn gibt
</code></pre>
</blockquote>
<p><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="😕"
    /> Meinst Du folgendes?</p>
<pre><code class="language-cpp">string newstring(last_pos + 1, pos);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339097</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 05 Aug 2007 17:17:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 17:22:50 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>Edit: gcc aus C::B will die find_if Anweisung nicht kompilieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
</blockquote>
<p>Das liegt daran dass isalpha dort wohl ein Makro ist (und imho auch sein darf). Zusätzlich könnten Dir die Überladungen aus &lt;locale&gt; einen Strich durch die Rechnung machen (betrifft alle Compiler).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339098</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sun, 05 Aug 2007 17:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 17:44:57 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>KasF schrieb:</p>
<blockquote>
<p>Edit: gcc aus C::B will die find_if Anweisung nicht kompilieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
</blockquote>
<p>Das liegt daran dass isalpha dort wohl ein Makro ist (und imho auch sein darf).</p>
</blockquote>
<p>AFAIK ist 'isalpha' sowieso nur mit 'int'-Parametern definiert, d.h. die Signatur passt hier eh nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339111</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 05 Aug 2007 17:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 17:45:53 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p><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="😕"
    /> Meinst Du folgendes?</p>
<pre><code class="language-cpp">string newstring(last_pos + 1, pos);
</code></pre>
</blockquote>
<p><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="🙄"
    /> <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="🙄"
    /><br />
Wollte eigentlich sstr nen substring übergeben, aber habe voll vergessen, dass man einen string auch so konstruieren kann.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Das liegt daran dass isalpha dort wohl ein Makro ist (und imho auch sein darf). Zusätzlich könnten Dir die Überladungen aus &lt;locale&gt; einen Strich durch die Rechnung machen (betrifft alle Compiler).</p>
</blockquote>
<p>Achso, danke.</p>
<pre><code class="language-cpp">bool isAlpha(char c)
{
    return isalpha(c);
}
...
find_if(text.begin(),text.end(),isAlpha)
...
stringstream sstr( string(last_pos + 1,pos) );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339113</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 05 Aug 2007 17:45:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 18:23:41 GMT]]></title><description><![CDATA[<p>Du musst aber, glaube ich, noch ne Kleinigkeit ändern, 'G' wird noch nicht erfasst (bei mir jedenfalls nicht). Das Problem hatte ich auch erst :p</p>
<p>^Und ich hab meinen Code nochmal verändert, 'text' kann ich ja verändern wie ich will :)^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339134</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 05 Aug 2007 18:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 18:36:57 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Du musst aber, glaube ich, noch ne Kleinigkeit ändern, 'G' wird noch nicht erfasst (bei mir jedenfalls nicht). Das Problem hatte ich auch erst :p</p>
</blockquote>
<pre><code class="language-cpp">bool isAlpha(char c)
{
    return isalpha(c);
}

void ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{

    char last_char = 0;
    string::iterator pos = text.end(), last_pos = text.end();

    while ( (pos = find_if(text.begin(),text.end(),isAlpha)) != text.end() )
    {
        if( pos == text.begin() )
        {
            last_char = *pos;
            last_pos = pos;
            *pos = 0;

            continue;
        }

        stringstream sstr( string(last_pos + 1,pos) );

        double val = 0;
        sstr &gt;&gt; val;

        coords[last_char] = val;

        last_char = *pos;
        last_pos = pos;
        *pos = 0;
    }

     stringstream sstr( string(last_pos+1,text.end()) );

     double val = 0;
     sstr &gt;&gt; val;

     coords[last_char] = val;

}
</code></pre>
<p><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="🙂"
    /><br />
Das kann man aber bestimmt noch eleganter lösen, vielleicht zaubert ja Konrad ne rekursive Lösung ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339146</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 05 Aug 2007 18:36:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Sun, 05 Aug 2007 18:49:45 GMT]]></title><description><![CDATA[<p>Und nochmal was gefrickelt:</p>
<pre><code class="language-cpp">bool isAlpha(char c)
{
    return isalpha(c);
}

template&lt;class T, class S&gt;
T lexical_cast(const S&amp; val)
{
    stringstream sstr(&quot;&quot;);
    T newval;
    if( !( sstr &lt;&lt; val &amp;&amp; sstr &gt;&gt; newval ) )
       throw bad_cast();

    return newval;
}

void ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{

    typedef string::iterator sIT;

    struct helpFunc {
        void operator()(char&amp; last_char, sIT&amp; pos, sIT&amp; last_pos)
        {
            last_char = *pos;
            last_pos = pos;
            *pos = 0;
        }
    };

    char last_char = 0;
    sIT pos = text.end(), last_pos = text.end();

    while ( (pos = find_if(text.begin(),text.end(),isAlpha)) != text.end() )
    {
        if( pos == text.begin() )
        {
            helpFunc()(last_char,pos,last_pos);
            continue;
        }

        coords[last_char] = lexical_cast&lt;double&gt;( string(last_pos + 1,pos) );

        helpFunc()(last_char,pos,last_pos);
    }

     coords[last_char] = coords[last_char] = lexical_cast&lt;double&gt;( string(last_pos+1,text.end()) );

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339151</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 05 Aug 2007 18:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Mon, 06 Aug 2007 00:22:29 GMT]]></title><description><![CDATA[<p>hehe :p:</p>
<pre><code class="language-cpp">void ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{
	for ( int i=text.length()-1; i&gt;=0; --i )
	{
		if ( isalpha( text[i] ) )
		{
			coords[ text[i] ] = atof( text.c_str()+i+1 );
			text[i] = '\0';
		}
	}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339291</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 06 Aug 2007 00:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Mon, 06 Aug 2007 00:28:00 GMT]]></title><description><![CDATA[<p>Noch ein Nachtschwärmer <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>Elegante Idee von Rückwärts durchzulaufen. Wenn die Sonne aufgeht, schreibe ich meins um ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339293</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 00:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zahlenwerte aus einem String &amp;quot;filtern&amp;quot; on Mon, 06 Aug 2007 12:00:39 GMT]]></title><description><![CDATA[<p>geSTL'te Version:</p>
<pre><code class="language-cpp">void ExtractCoords( string text, map&lt;char,double&gt;&amp; coords )
{
    string::reverse_iterator pos = text.rend();

    while ( ( pos = find_if(text.rbegin(), text.rend(), isAlpha) ) != text.rend() )
    {
        size_t dis = distance(pos,text.rend());

        coords[*pos] = lexical_cast&lt;double&gt;( text.substr(dis) );
        text.erase(dis-1);
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1339500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339500</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 06 Aug 2007 12:00:39 GMT</pubDate></item></channel></rss>