<?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[Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot;]]></title><description><![CDATA[<p>Mein kleiner Parser soll strings welche innerhalb von &quot;&quot; stehen parsen. Damit man innerhalb von strings auch &quot; verwenden kann, muss man es mit einem \ escapen.<br />
Damit der Parser diese escapten &quot; überspringt hab ich das ganze so gelöst:</p>
<pre><code class="language-cpp">else if( *it == '\&quot;' ) //beginning of a string
{
	std::string::const_iterator begin( ++it );

continueSkipping:
	while( it != end &amp;&amp; *it != '\&quot;' )
	{
		++it;
	}

	if( *( it - 1 ) == '\\' )//an escaped quotation character
	{
		++it;
		goto continueSkipping;	//go back and continue skipping the strings content
	}

        argVec.push_back( std::string( begin, it++ ) );

	//entfernt die backslashes der escapten &quot;
	boost::algorithm::erase_all( argVec[ argVec.size() - 1 ], &quot;\\&quot; );
}
</code></pre>
<p>Nach reiflicher überlegung fiel mir kein direkterer Weg ein als ein goto zu benutzen.<br />
Alle alternativen die mir in den Kopf kommen sind deutlich komplizierter gestrickt.</p>
<p>Hat jemand von euch eine einfacherere Lösung?</p>
<p>Gruß Any</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175753/sinnvolles-goto-skipping-von-quot-escaped-characters-quot</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 10:49:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175753.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Mar 2007 19:45:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Tue, 13 Mar 2007 19:45:05 GMT]]></title><description><![CDATA[<p>Mein kleiner Parser soll strings welche innerhalb von &quot;&quot; stehen parsen. Damit man innerhalb von strings auch &quot; verwenden kann, muss man es mit einem \ escapen.<br />
Damit der Parser diese escapten &quot; überspringt hab ich das ganze so gelöst:</p>
<pre><code class="language-cpp">else if( *it == '\&quot;' ) //beginning of a string
{
	std::string::const_iterator begin( ++it );

continueSkipping:
	while( it != end &amp;&amp; *it != '\&quot;' )
	{
		++it;
	}

	if( *( it - 1 ) == '\\' )//an escaped quotation character
	{
		++it;
		goto continueSkipping;	//go back and continue skipping the strings content
	}

        argVec.push_back( std::string( begin, it++ ) );

	//entfernt die backslashes der escapten &quot;
	boost::algorithm::erase_all( argVec[ argVec.size() - 1 ], &quot;\\&quot; );
}
</code></pre>
<p>Nach reiflicher überlegung fiel mir kein direkterer Weg ein als ein goto zu benutzen.<br />
Alle alternativen die mir in den Kopf kommen sind deutlich komplizierter gestrickt.</p>
<p>Hat jemand von euch eine einfacherere Lösung?</p>
<p>Gruß Any</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1244978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1244978</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Tue, 13 Mar 2007 19:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Tue, 13 Mar 2007 20:05:41 GMT]]></title><description><![CDATA[<p>dein if-goto mit in die while ziehen. muss ich das noch demonstrieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1244992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1244992</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Tue, 13 Mar 2007 20:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Tue, 13 Mar 2007 23:05:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">else if( *it == '\&quot;' ) //beginning of a string
{
	std::string::const_iterator begin( it );

         do
         {
             ++it;
    	    while( it != end &amp;&amp; *it != '\&quot;' )
	    {
	  	++it;
	    }
	} while( *( it - 1 ) == '\\' )//an escaped quotation character

        argVec.push_back( std::string( begin, it++ ) );

	//entfernt die backslashes der escapten &quot;
	boost::algorithm::erase_all( argVec[ argVec.size() - 1 ], &quot;\\&quot; );
}
</code></pre>
<p>Bin zu faul as jetzt zu testen... aber wie waers damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245078</guid><dc:creator><![CDATA[sleepy]]></dc:creator><pubDate>Tue, 13 Mar 2007 23:05:25 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 00:17:23 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">else if (*it == '\&quot;') // beginning of a string 
{ 
    std::vector&lt;char&gt; buffer;
    for (++it; it != end &amp;&amp; *it != '\&quot;'; ++it)
    {
        if (*it == '\\' &amp;&amp; (it + 1) != end)
            ++it; // skip \ in quoted character
        buffer.push_back(*it);
    }
    ++it;

    argVec.push_back(std::string(buffer.begin(), buffer.end()));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1245088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245088</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 14 Mar 2007 00:17:23 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 00:58:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string::const_iterator begin( ++it );
    for ( ; it != end &amp;&amp; ( *it != '\&quot;' || it[ -1 ] == '\\' ); ++it );
    arvVec.push_back( std::string( begin, it ) );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1245092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245092</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 14 Mar 2007 00:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 01:47:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// skip to next unescaped double quote -- end of string literal
for(; it != end &amp;&amp; *it != '&quot;'; ++it)
    if (*it == '\\' &amp;&amp; (it+1) != end)
        ++it;
</code></pre>
<p>ist das ne angewohnheit von C++lern, dass jeder code sehr lang sein muss, viel &quot;std::&quot; enthalten muss und relativ kompliziert sein muss?</p>
<p>schoener code und ein beschreibender kommentar reicht doch.</p>
<p>sleepy: dein code ueberrennt auch normale quotes, wenn ich das char-literal richtig interpretiere: '\&quot;' sollte ein '&quot;' sein, iirc</p>
<p>hustbaer: du kopierst zeichen herum. hat optimierungspotential.</p>
<p>warum zum geier lassen sich iteratoren nur auf (un)gleichheit und nicht auf relation vergleichen? wuerde den code so viel sinnvoller machen.</p>
<p>camper: iteratoren mit index-operator? wenns das gibt, dann kann ich doch auch auf relation testen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245098</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Wed, 14 Mar 2007 01:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 02:39:21 GMT]]></title><description><![CDATA[<p>c.rackwitz schrieb:</p>
<blockquote>
<p>warum zum geier lassen sich iteratoren nur auf (un)gleichheit und nicht auf relation vergleichen? wuerde den code so viel sinnvoller machen.</p>
<p>camper: iteratoren mit index-operator? wenns das gibt, dann kann ich doch auch auf relation testen, oder?</p>
</blockquote>
<p>Korrekt. Beides ist für random-access-Iteratoren definiert. Damit erübrigt sich die Frage nach dem Test mit != an Stelle von &lt;. Mit != ist es nicht auf diese Iteratorkategorie beschränkt. Zudem ist für mich nicht erkennbar, was ein &lt; hier an zusätzlichem Sinn hineinbringen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245104</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 14 Mar 2007 02:39:21 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 07:53:05 GMT]]></title><description><![CDATA[<p>c.rackwitz schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// skip to next unescaped double quote -- end of string literal
for(; it != end &amp;&amp; *it != '&quot;'; ++it)
    if (*it == '\\' &amp;&amp; (it+1) != end)
        ++it;
</code></pre>
</blockquote>
<p>man fummelt eigentlich nicht innendrin an der schleifenvariablen herum.<br />
bisher gefällt mir keine der lösungen. klingt danach, als sollte man den umgebenden code umschubsen.<br />
wenn das nicht in frage kommt, gewinnt c.rackwitz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245148</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Mar 2007 07:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 08:03:45 GMT]]></title><description><![CDATA[<p>Any schrieb:</p>
<blockquote>
<p>Mein kleiner Parser soll strings welche innerhalb von &quot;&quot; stehen parsen. Damit man innerhalb von strings auch &quot; verwenden kann, muss man es mit einem \ escapen.<br />
Damit der Parser diese escapten &quot; überspringt hab ich das ganze so gelöst:</p>
<pre><code class="language-cpp">else if( *it == '\&quot;' ) //beginning of a string
{
	std::string::const_iterator begin( ++it );

continueSkipping:
	while( it != end &amp;&amp; *it != '\&quot;' )
	{
		++it;
	}
			
	if( *( it - 1 ) == '\\' )//an escaped quotation character
	{
		++it;
		goto continueSkipping;	//go back and continue skipping the strings content
	}

        argVec.push_back( std::string( begin, it++ ) );

	//entfernt die backslashes der escapten &quot;
	boost::algorithm::erase_all( argVec[ argVec.size() - 1 ], &quot;\\&quot; );
}
</code></pre>
<p>Nach reiflicher überlegung fiel mir kein direkterer Weg ein als ein goto zu benutzen.<br />
Alle alternativen die mir in den Kopf kommen sind deutlich komplizierter gestrickt.</p>
<p>Hat jemand von euch eine einfacherere Lösung?</p>
<p>Gruß Any</p>
</blockquote>
<p>Nach einen flüchtigen Blick auf den code kommt mir das in den Sinn:</p>
<p>Als Pseudocode:</p>
<ul>
<li>solange 2 Bedingungen erfüllt sind, wiederhole etwas.</li>
<li>wenn eine weitere Bedingung auch noch erfüllt ist, mache es auch und mache mit der Wiederholung weiter</li>
</ul>
<p>Vereinfacht:</p>
<ul>
<li>solange 2 Bedinung und noch eine weitere erfüllt ist, wiederhole etwas.</li>
</ul>
<p>also:</p>
<ul>
<li>solange 3 Bedingungen erfüllt sind, wiederhole etwas.</li>
</ul>
<p>Hier als code:</p>
<pre><code class="language-cpp">else if( *it == '\&quot;' ) //beginning of a string
{
	std::string::const_iterator begin( ++it );

continueSkipping:
	while( it != end &amp;&amp; *it != '\&quot;'
	     &amp;&amp;  *( it - 1 ) == '\\' )//an escaped quotation character
	{
		++it;
	}

        argVec.push_back( std::string( begin, it++ ) );

	//entfernt die backslashes der escapten &quot;
	boost::algorithm::erase_all( argVec[ argVec.size() - 1 ], &quot;\\&quot; );
}
</code></pre>
<p>Wobei ich einfach einen stateful Parser schreiben würde.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245162</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Wed, 14 Mar 2007 08:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 10:05:56 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Wobei ich einfach einen stateful Parser schreiben würde.</p>
</blockquote>
<p><strong>!!!</strong></p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245256</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 14 Mar 2007 10:05:56 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 12:38:50 GMT]]></title><description><![CDATA[<blockquote>
<p>hustbaer: du kopierst zeichen herum. hat optimierungspotential</p>
</blockquote>
<p>Leute, sagt mir bitte nicht dass mein Code langsam(er als ein anderer) ist, ohne es ausprobiert zu haben. Ich denke ich weiss im allgemeinen was ich tue. Das einzige was da optimiert gehört ist dass man a) sowieso keinen vector&lt;string&gt; verwenden sollte weil das schonmal ganz grob langsam ist, und b) den &quot;buffer&quot; irgendwo als member anlegen sollte, damit der nicht ständig neu angelegt und reallokiert wird.<br />
Ansonsten ist single-pass im Allgemeinen schneller als multi-pass... sollte auch logisch sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245369</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 14 Mar 2007 12:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 15:56:15 GMT]]></title><description><![CDATA[<p>ach jetzt seh ich das: du nimmst gleich die backslashes aus dem string mit weg... daran hab ich nicht gedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245566</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Wed, 14 Mar 2007 15:56:15 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 16:55:33 GMT]]></title><description><![CDATA[<p>Jupp <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 />
Wobei ich natürlich nicht behaupten will dass meine Version &quot;optimal&quot; sei -- nur komplett sinnlos kopiere ich auch nicht Daten durch die Gegend. Sozusagen <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/1245627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245627</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 14 Mar 2007 16:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Wed, 14 Mar 2007 22:15:03 GMT]]></title><description><![CDATA[<p>Irgendwie hatte ich wohl nen Blackout beim schreiben, hätte mir eigentlich auffallen sollen, dass man die Bedingung ja direkt dran hängen kann ohne irgendwelche unnötigen Vergleiche vorzunehmen.</p>
<p>Ich habs jetzt so:</p>
<pre><code class="language-cpp">else if( *it == '\&quot;' ) //beginning of a string
{
	std::string::const_iterator begin( ++it );

	while( (it != end &amp;&amp; *it != '\&quot;') ||
		( *it == '\&quot;' &amp;&amp; *( it - 1 ) == '\\' ) )
	{								
		++it;
	}

	argVec.push_back( std::string( begin, it++ ) );

	boost::algorithm::replace_all( argVec[ argVec.size() - 1 ], &quot;\\\&quot;&quot;, &quot;\&quot;&quot; );
}
</code></pre>
<p>Irgendwelche aufwändigen Techniken sind hier wirklich nicht angebracht, ich hab so einen Parser der robust und fehlertorelant genug ist in knapp 50Zeilen mit viel whitespace.<br />
Wenn es die Mühe wert wäre, würde ich einen richtigen Parser schreiben, der escape Sequenzen auch richtig beherrscht (tut der hier ja nicht).</p>
<p>Danke c.rackwitz für den &quot;Wink mit dem Zaunpfahl&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245800</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Wed, 14 Mar 2007 22:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Thu, 15 Mar 2007 00:01:07 GMT]]></title><description><![CDATA[<p>Ich möchte nur anmerken dass es nicht immer gut ist ultra-kompakten Code zu haben. Ich habe lieber Code der irgendwo zwischendrin ist (auf &quot;kompakt&quot; bezogen), dafür halbwegs gut lesbar und halbwegs gut verständlich, als Code der zwar ultra kompakt ist, dafür nicht so einfach verständlich.</p>
<p>Klar ist es gut &quot;übersichtlich&quot; zu programmieren, aber man kann es auch übertreiben finde ich. Ich lese lieber Code auf 2 Bildschirmseiten wo ich in 30 Sekunden verstehe was abgeht (und wie), als Code auf 1/2 Bildschirmseite wo ich nach 2 Minuten immer noch nicht 100% sicher bin warum das eigentlich funktioniert, bzw. im Extremfall: was der Code eigentlich tut, bzw. wie. Fehler Suchen in so einem Code macht garkeinen Spass.</p>
<p>Die &quot;while Schleife mit gleich allem in der Bedingung&quot; ist für mich schon nichtmehr Grenzwertig, sondern &quot;zu kompakt&quot;. z.B. ist nicht auf den ersten Blick ersichtlich dass das &quot;*(it - 1)&quot; OK ist. Es ist zwar OK (it wird ja vorher incrementiert), aber man kann ohne weiteres mal ein paar Sekunden brauchen bis man das überzuckert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1245819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1245819</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 15 Mar 2007 00:01:07 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Fri, 16 Mar 2007 21:32:43 GMT]]></title><description><![CDATA[<p>in dem falle ist ein kommentar angebracht, um die verständlichkeit zu wahren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1246986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1246986</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Fri, 16 Mar 2007 21:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Fri, 16 Mar 2007 23:08:33 GMT]]></title><description><![CDATA[<p>r0nny schrieb:</p>
<blockquote>
<p>in dem falle ist ein kommentar angebracht, um die verständlichkeit zu wahren</p>
</blockquote>
<p>Die Verständlichkeit, ja. Aber es geht auch darum ob ich einem Code &quot;trauen&quot; kann. Und da hilft auch das Kommentar nix. Da muss ich dann alle Randbedingungen durchgehen und ... ach, ich finde das einfach lästig mit so kompaktem Code <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/1247016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247016</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 16 Mar 2007 23:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Sat, 17 Mar 2007 11:51:06 GMT]]></title><description><![CDATA[<p>Die Kommentare hab ich rausgenommen.<br />
Original sieht es so aus:</p>
<pre><code class="language-cpp">while( (it != end &amp;&amp; *it != '\&quot;') ||	//a quote char start
																//skipping
	( *it == '\&quot;' &amp;&amp; *( it - 1 ) == '\\' ) )//an escaped quote char
{													//continue skipping
				++it;
}
</code></pre>
<p>Die Formatierung passt jetzt halt nimmer, deswegen hab ich sie auch rausgenommen.</p>
<p>Im Prinzip ist es aber sehr einfach zu verstehen, da durch das Oder zwei unterschiedliche Bedingungen getrennt werden, kann man sie sich auch getrennt<br />
anschauen und dann seh ich da kein(e) Problem(e) beim Verständnis.<br />
Beide Bedingungen für sich sind doch sehr einfach zu verstehen.</p>
<p>Allerdings fällt mir gerade ein Fehler auf, die Bedingung it!=end muss für beide Kriterien gelten.</p>
<p>Und um das -1 kommt man nicht herum um das Zeichen das davor liegt zu prüfen.<br />
Der Iterator wird ikrementiert, damit das anfängliche &quot; nicht im string enthalten ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247159</guid><dc:creator><![CDATA[Any]]></dc:creator><pubDate>Sat, 17 Mar 2007 11:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to Sinnvolles goto - Skipping von &amp;quot;escaped characters&amp;quot; on Sat, 17 Mar 2007 12:10:07 GMT]]></title><description><![CDATA[<p>Ich weiß nicht ... bisher hat mich nichts überzeugt. Was ist eigentlich gegen einen stateful parser einzuwenden? Ist zwar länger, folgt aber einem festen Schema und ist beliebig erweiterbar.</p>
<pre><code class="language-cpp">bool parse_quoted_string(Iterator begin, Iterator end)
{
    enum states { start, normal, quoted, complete, failure };

    states state = start;

    for (Iterator it = begin; it != end and state != failure; ++it) {
        switch (state) {
            case start:
                if (*it == '&quot;') state = normal;
                else            state = failure;
                break;
            case normal:
                if (*it == '\\')     state = quoted;
                else if (*it == '&quot;') state = complete;
                else                 /* Zeichen verarbeiten */;
                break;
            case quoted:
                if (*it != '&quot;')
                    state = failure;
                else {
                    state = normal;
                    /* Zeichen verarbeiten */
                }
                break;
            case complete:
                state = failure;
                break;
        }
    };

    return state == complete;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1247170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247170</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 17 Mar 2007 12:10:07 GMT</pubDate></item></channel></rss>