<?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[Werte &#x27;klug&#x27; einlesen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich arbeite selten mit istreams und bin daher nicht sicher auf diesem Gebiet.</p>
<p>Ich möchte Tupel einlesen. Diese Tupel haben stets das Format &quot;(a, b)&quot;, wobei a und b Gleitkommazahlen sind. Das Tupel wird intern als 'x_y_pair' repräsentiert (ich weiß, 'std::pair' täte es auch).</p>
<p>Ist folgender Code zum Einlesen in Ordnung, wenn man davon ausgeht, dass zwischen allen Tokens Leerzeichen vorkommen dürfen? Übersehe ich etwas?</p>
<pre><code class="language-cpp">std::istream&amp; operator &gt;&gt; (std::istream&amp; in, x_y_pair&amp; v)
{
    char c;

    if (not (in &gt;&gt; c) or c != '(') return fail(in);
    if (not (in &gt;&gt; v.x)) return in;
    if (not (in &gt;&gt; c) or c != ',') return fail(in);
    if (not (in &gt;&gt; v.y)) return in;
    if (not (in &gt;&gt; c) or c != ')') return fail(in);
    return in;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/171893/werte-klug-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 14:35:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171893.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Jan 2007 13:34:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Werte &#x27;klug&#x27; einlesen on Tue, 30 Jan 2007 13:34:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich arbeite selten mit istreams und bin daher nicht sicher auf diesem Gebiet.</p>
<p>Ich möchte Tupel einlesen. Diese Tupel haben stets das Format &quot;(a, b)&quot;, wobei a und b Gleitkommazahlen sind. Das Tupel wird intern als 'x_y_pair' repräsentiert (ich weiß, 'std::pair' täte es auch).</p>
<p>Ist folgender Code zum Einlesen in Ordnung, wenn man davon ausgeht, dass zwischen allen Tokens Leerzeichen vorkommen dürfen? Übersehe ich etwas?</p>
<pre><code class="language-cpp">std::istream&amp; operator &gt;&gt; (std::istream&amp; in, x_y_pair&amp; v)
{
    char c;

    if (not (in &gt;&gt; c) or c != '(') return fail(in);
    if (not (in &gt;&gt; v.x)) return in;
    if (not (in &gt;&gt; c) or c != ',') return fail(in);
    if (not (in &gt;&gt; v.y)) return in;
    if (not (in &gt;&gt; c) or c != ')') return fail(in);
    return in;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1219796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219796</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 30 Jan 2007 13:34:03 GMT</pubDate></item><item><title><![CDATA[Reply to Werte &#x27;klug&#x27; einlesen on Tue, 30 Jan 2007 13:41:54 GMT]]></title><description><![CDATA[<p>Ich würde die Daten nicht sofort in dein pair reinschreiben, sondern erstmal in eine lokale Variable, die ganz am Ende nach v kopiert wird. Auf diese Weise bleibt deine Variable in einem gültigen Zustand, wenn mittendrin etwas schiefgegangen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219802</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 30 Jan 2007 13:41:54 GMT</pubDate></item><item><title><![CDATA[Reply to Werte &#x27;klug&#x27; einlesen on Tue, 30 Jan 2007 16:18:44 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ich würde die Daten nicht sofort in dein pair reinschreiben, sondern erstmal in eine lokale Variable, die ganz am Ende nach v kopiert wird. Auf diese Weise bleibt deine Variable in einem gültigen Zustand, wenn mittendrin etwas schiefgegangen ist.</p>
</blockquote>
<p>Na, wenn das alles ist ... Danke. <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="🙂"
    /> Wird gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1219978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1219978</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 30 Jan 2007 16:18:44 GMT</pubDate></item><item><title><![CDATA[Reply to Werte &#x27;klug&#x27; einlesen on Tue, 30 Jan 2007 21:15:53 GMT]]></title><description><![CDATA[<p>Hallo Konrad,</p>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Das Tupel wird intern als 'x_y_pair' repräsentiert (ich weiß, 'std::pair' täte es auch).</p>
</blockquote>
<p>Eine eigene Klasse oder Struktur ist die saubere Lösung, wenn Du so eine Eingabefunktion schreibst.</p>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Ist folgender Code zum Einlesen in Ordnung, wenn man davon ausgeht, dass zwischen allen Tokens Leerzeichen vorkommen dürfen?</p>
</blockquote>
<p>Um die Leerzeichen brauchst Du Dir keine Sorgen machen. Die formatierten Eingaben des istream sind dafür gemacht. Da darf auch ein tab '\t' oder newline '\n' zwischen den Token stehen.</p>
<p>man könnte es vielleicht noch ein wenig verändern ...</p>
<pre><code class="language-cpp">template&lt; char C &gt; struct Char {};
template&lt; char C &gt;
std::istream&amp; operator&gt;&gt;( std::istream&amp; in, const Char&lt; C &gt; )
{
    char c;
    if( in &gt;&gt; c &amp;&amp; c != C )
        in.setstate( std::ios_base::failbit );
    return in;
}

std::istream&amp; operator&gt;&gt;( std::istream&amp; in, x_y_pair&amp; v )
{
    x_y_pair tmp;
    if(     in &gt;&gt; Char&lt;'('&gt;()
        &amp;&amp;  in &gt;&gt; tmp.x
        &amp;&amp;  in &gt;&gt; Char&lt;','&gt;()
        &amp;&amp;  in &gt;&gt; tmp.y
        &amp;&amp;  in &gt;&gt; Char&lt;')'&gt;() )
        v = tmp;
    return in;
}
</code></pre>
<p>aber das ist letztlich Geschmackssache.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220200</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 30 Jan 2007 21:15:53 GMT</pubDate></item><item><title><![CDATA[Reply to Werte &#x27;klug&#x27; einlesen on Tue, 30 Jan 2007 21:26:08 GMT]]></title><description><![CDATA[<p>Hallo Werner,</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Das Tupel wird intern als 'x_y_pair' repräsentiert (ich weiß, 'std::pair' täte es auch).</p>
</blockquote>
<p>Eine eigene Klasse oder Struktur ist die saubere Lösung, wenn Du so eine Eingabefunktion schreibst.</p>
</blockquote>
<p>Schon klar, ich meinte eigentlich, dass die Struktur von 'std::pair' erben sollte, denn sie &quot;ist-ein&quot; 'std::pair'.</p>
<blockquote>
<p>man könnte es vielleicht noch ein wenig verändern ...</p>
</blockquote>
<p>Die Änderungen sind gut, gehen aber ziemlich in Richtung Parser-Framework, was ich in C++ sowieso schmerzlich vermisse. Ich wünschte mir, C++ hätte da sowas komfortables wie Haskell. Klar, man könnte Spirit verwenden aber das ist für sowas kleines dann doch hoffnungsloses Overkill, vor allem, wenn man an die Codegröße denkt. Ich hätte gerne ein Lightweight-Parserframework. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1220209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220209</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Tue, 30 Jan 2007 21:26:08 GMT</pubDate></item></channel></rss>