<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.179.5.62</id>
	<title>FreitagsrundenWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stageing.freitagsrunde.org//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=85.179.5.62"/>
	<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//Spezial:Beitr%C3%A4ge/85.179.5.62"/>
	<updated>2026-11-02T02:06:07Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/Text_processing&amp;diff=16837</id>
		<title>C-Kurs/Text processing</title>
		<link rel="alternate" type="text/html" href="wiki.stageing.freitagsrunde.org//index.php?title=C-Kurs/Text_processing&amp;diff=16837"/>
		<updated>2011-10-18T10:07:07Z</updated>

		<summary type="html">&lt;p&gt;85.179.5.62: /* Refactoring */ Methode -&amp;gt; Funktion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorgabe ==&lt;br /&gt;
Folgender Code zum Escaping von XML ist gegeben:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;assert.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int&lt;br /&gt;
 copy_escape_xml(char *output, const char *input) {&lt;br /&gt;
     const char *read = input;&lt;br /&gt;
     char *write = output;&lt;br /&gt;
 &lt;br /&gt;
     assert(input != NULL);&lt;br /&gt;
     assert(output != NULL);&lt;br /&gt;
 &lt;br /&gt;
     for (;;) {&lt;br /&gt;
         switch (read[0]) {&lt;br /&gt;
         case &#039;\0&#039;:&lt;br /&gt;
             write[0] = &#039;\0&#039;;&lt;br /&gt;
             return write - output;  /* == strlen(output) */&lt;br /&gt;
         case &#039;&amp;amp;&#039;:&lt;br /&gt;
             strcpy(write, &amp;quot;&amp;amp;amp;amp;&amp;quot;);&lt;br /&gt;
             write += 5;&lt;br /&gt;
             break;&lt;br /&gt;
         case &#039;&amp;lt;&#039;:&lt;br /&gt;
             strcpy(write, &amp;quot;&amp;amp;amp;lt;&amp;quot;);&lt;br /&gt;
             write += 4;&lt;br /&gt;
             break;&lt;br /&gt;
         case &#039;&amp;gt;&#039;:&lt;br /&gt;
             strcpy(write, &amp;quot;&amp;amp;amp;gt;&amp;quot;);&lt;br /&gt;
             write += 4;&lt;br /&gt;
             break;&lt;br /&gt;
         case &#039;\&#039;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&#039;:&lt;br /&gt;
             strcpy(write, &amp;quot;&amp;amp;amp;apos;&amp;quot;);&lt;br /&gt;
             write += 6;&lt;br /&gt;
             break;&lt;br /&gt;
         case &#039;&amp;quot;&#039;:&lt;br /&gt;
             strcpy(write, &amp;quot;&amp;amp;amp;quot;&amp;quot;);&lt;br /&gt;
             write += 6;&lt;br /&gt;
             break;&lt;br /&gt;
         default:&lt;br /&gt;
             *(write++) = read[0];&lt;br /&gt;
         }&lt;br /&gt;
         read++;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Aufgaben ==&lt;br /&gt;
&lt;br /&gt;
=== Anwendung ===&lt;br /&gt;
Finde heraus, was die Funktion &amp;lt;tt&amp;gt;copy_escape_xml&amp;lt;/tt&amp;gt; aus dem String &amp;lt;tt&amp;gt;&amp;quot;Kernighan &amp;amp; Ritchie&amp;quot;&amp;lt;/tt&amp;gt; macht und schreibe eine Test-Funktion für diesen Fall.&lt;br /&gt;
&lt;br /&gt;
=== Refactoring ===&lt;br /&gt;
Extrahiere eine Funktion aus den Blöcken mit&lt;br /&gt;
&lt;br /&gt;
 strcpy(write, &amp;quot;...&amp;quot;);&lt;br /&gt;
 write += ...;&lt;br /&gt;
&lt;br /&gt;
um Code-Duplication zu reduzieren.  Nutze die Test-Funktion um sicherzustellen, dass der Code nach deinem Refactoring noch funktioniert.&lt;br /&gt;
&lt;br /&gt;
=== In-place ===&lt;br /&gt;
Schreibe eine Methode &amp;lt;tt&amp;gt;single_slashes&amp;lt;/tt&amp;gt;, die Folgen von Schrägstrichen durch einzelne Schrägstriche ersetzt.&lt;br /&gt;
Aus &amp;quot;/usr//bin///env&amp;quot; soll &amp;quot;/usr/bin/env&amp;quot; werden.&lt;br /&gt;
&lt;br /&gt;
Da die Strings dabei nicht länger werden können, bietet sich hier an, &amp;quot;in place&amp;quot; (auf demselben String) zu arbeiten.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Prototyp von &amp;lt;tt&amp;gt;single_slashes&amp;lt;/tt&amp;gt; sollte sein:&lt;br /&gt;
&lt;br /&gt;
 void single_slashes(char *input_output);&lt;br /&gt;
&lt;br /&gt;
Auch hier kann die Verwendung von Lese- und Schreibköpfen (ähnlich &amp;lt;tt&amp;gt;copy_escape_xml&amp;lt;/tt&amp;gt; oben) praktisch sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Viel Spaß und Erfolg!&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>85.179.5.62</name></author>
	</entry>
</feed>