<?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[Wiederholt vorkommene Zeichen elemenieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss ein Programm schreiben, dass einen eingegebenen Text auf doppelt vorkommene Buchstaben überprüft und diese eleminiert.</p>
<p>Also falls ich eingebe:<br />
aabbbcdddd</p>
<p>soll rauskommen:<br />
abcd</p>
<p>Ich bin noch ziemlicher Anfänger in C++ und bin bis jetzt soweit gekommen:</p>
<p>Also der eingegebene Text wird in &quot;eingabe&quot; gespeichert.</p>
<p>for (i=0;i&lt;strlen(eingabe);i++)<br />
if (eingabe[i]==eingabe[i+1]) eingabe[i+1] = eingabe[i+2];</p>
<p>Durch die Schleife wird zwar aus &quot;aabcd&quot; -&gt; abcd , jedoch nicht aus aaabcd -&gt; abcd sondern aabcd ...</p>
<p>Was mach ich falsch ? Wie kriege ich hin, dass das Programm wenn mehrere Zeichen wiederholt nacheinander Vorkommen diese eleminiert, so das nur unterschiedliche Zeichen auf einander folgen können ?</p>
<p>Danke für eure Hilfe<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171010/wiederholt-vorkommene-zeichen-elemenieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 08:07:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171010.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Jan 2007 20:06:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Sun, 21 Jan 2007 20:06:03 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss ein Programm schreiben, dass einen eingegebenen Text auf doppelt vorkommene Buchstaben überprüft und diese eleminiert.</p>
<p>Also falls ich eingebe:<br />
aabbbcdddd</p>
<p>soll rauskommen:<br />
abcd</p>
<p>Ich bin noch ziemlicher Anfänger in C++ und bin bis jetzt soweit gekommen:</p>
<p>Also der eingegebene Text wird in &quot;eingabe&quot; gespeichert.</p>
<p>for (i=0;i&lt;strlen(eingabe);i++)<br />
if (eingabe[i]==eingabe[i+1]) eingabe[i+1] = eingabe[i+2];</p>
<p>Durch die Schleife wird zwar aus &quot;aabcd&quot; -&gt; abcd , jedoch nicht aus aaabcd -&gt; abcd sondern aabcd ...</p>
<p>Was mach ich falsch ? Wie kriege ich hin, dass das Programm wenn mehrere Zeichen wiederholt nacheinander Vorkommen diese eleminiert, so das nur unterschiedliche Zeichen auf einander folgen können ?</p>
<p>Danke für eure Hilfe<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213980</guid><dc:creator><![CDATA[harry20204]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Sun, 21 Jan 2007 20:43:30 GMT]]></title><description><![CDATA[<p>Mach das -wie in C++ üblich- mit C++ String (<em>std::string/std::wstring</em>). Da kannst Du dann die Methoden <em>find</em> und <em>erase</em> verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214004</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Sun, 21 Jan 2007 20:52:52 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort. Leider habe ich damit noch gar keine Erfahrung. Ist es nicht möglich die Aufgabe zu lösen auf dem Wege wie ich angefangen habe ???<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214016</guid><dc:creator><![CDATA[harry20204]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Sun, 21 Jan 2007 20:58:09 GMT]]></title><description><![CDATA[<p>harry20204 schrieb:</p>
<blockquote>
<p>[...]Leider habe ich damit noch gar keine Erfahrung.[...]</p>
</blockquote>
<p>Falls Interesse besteht, hier ein paar Links:</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://www.volkard.de/vcppkold/die_klasse_string.html" rel="nofollow">http://www.volkard.de/vcppkold/die_klasse_string.html</a><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://cppreference.com/cppstring/index.html" rel="nofollow">http://cppreference.com/cppstring/index.html</a></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <a href="http://www.kharchi.de/cpp_strings.html#Zeichencodeumwandlung_ASCII_UCS_und" rel="nofollow">http://www.kharchi.de/cpp_strings.html#Zeichencodeumwandlung_ASCII_UCS_und</a></p>
<p>harry20204 schrieb:</p>
<blockquote>
<p>[...]Ist es nicht möglich die Aufgabe zu lösen auf dem Wege wie ich angefangen habe ???<br />
Gruß</p>
</blockquote>
<p>Jo:</p>
<blockquote>
<p>Durch die Schleife wird zwar aus &quot;aabcd&quot; -&gt; abcd , jedoch nicht aus aaabcd -&gt; abcd sondern aabcd ...</p>
</blockquote>
<p>Dann pack das in eine Funktion/Methode und ruf die <a href="http://de.wikipedia.org/wiki/Rekursion" rel="nofollow">rekursiv</a> auf. Damit sollte sich das Problem lösen lassen <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/1214027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214027</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 21 Jan 2007 20:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Sun, 21 Jan 2007 21:08:33 GMT]]></title><description><![CDATA[<p>Erstmal danke für die Links .... naja wie gesagt bin ich Anfänger ... ich sitze jetzt seit paar Stunden an dieser &quot;warscheinlich&quot; leichten Aufgabe und bin am Verzweifeln ...Habe schon sämtliche Sachen ausprobiert .... er gibt mir immer wieder das selbe aus. Wenn 2 gleiche Zeichen aufeinander folgen klappt es, wenn mehrere gleiche aufeinander folgen nicht. Kannst du mir nicht vll einfach die Schleife korrigieren ? Mir wäre dadurch sehr geholfen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214040</guid><dc:creator><![CDATA[harry20204]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Sun, 21 Jan 2007 21:38:58 GMT]]></title><description><![CDATA[<p>harry20204 schrieb:</p>
<blockquote>
<p>Erstmal danke für die Links .... naja wie gesagt bin ich Anfänger ... ich sitze jetzt seit paar Stunden an dieser &quot;warscheinlich&quot; leichten Aufgabe</p>
</blockquote>
<p>so leicht ist das gar nicht, wenn man es selber programmiert. Deine korrigierte Schleife sähe vielleicht so aus</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

int main()
{
    using namespace std;
    string eingabe;
    cin &gt;&gt; eingabe;
    // Lösche alle aufeinanderfolgenden doppelten Zeichen
    int iEnd = eingabe.size();
    int i = 0;
    for( int ib; (ib = i) != eingabe.size() &amp;&amp; ++i != eingabe.size(); )
    {
        if( eingabe[ib] == eingabe[i] )
        {
            for( ; ++i != eingabe.size(); )
                if( eingabe[ib] != eingabe[i] )
                    eingabe[++ib] = eingabe[i];
            iEnd = ib + 1;
            break;
        }
    }
    eingabe.erase( iEnd, eingabe.size() - iEnd ); // Rest löschen

    cout &lt;&lt; &quot;[&quot; &lt;&lt; eingabe &lt;&lt; &quot;]&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>einfacher ist es, den unique-Algorithmus aus der STL zu benutzen. Dann sieht's so aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;    // unique

int main()
{
    using namespace std;
    string eingabe;
    cin &gt;&gt; eingabe;
    // Lösche alle aufeinanderfolgenden doppelten Zeichen
    eingabe.erase( unique( eingabe.begin(), eingabe.end() ), eingabe.end() );
    cout &lt;&lt; &quot;[&quot; &lt;&lt; eingabe &lt;&lt; &quot;]&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214055</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 21 Jan 2007 21:38:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Mon, 22 Jan 2007 09:38:53 GMT]]></title><description><![CDATA[<p>harry20204 schrieb:</p>
<blockquote>
<p>...Ist es nicht möglich die Aufgabe zu lösen auf dem Wege wie ich angefangen habe ???<br />
Gruß</p>
</blockquote>
<p>Möglich ist alles.<br />
Aber Du hast die Wahl:</p>
<ul>
<li>8 Stunden lang an Deinem Weg rumzubasteln; Ergebnis: Eher gräßlicher Code; Lernfaktor 1 von 10; Code für nicht viel Anderes zu verwenden</li>
<li>2 Stunden in STL einarbeiten; Ergebnis: Sehr eleganter Code; Lernfaktor 8 von 10; Code (und STL-Kenntnisse) für viele spätere Projekte weiterverwendbar.</li>
</ul>
<p>Ich weiß, dass JEDER immer erstmal denkt, seine (meist über blutiges Trial&amp;Error-Fuddeln erarbeitete) Herangehensweise sei die effektiveste und sein Problem sei besonders exotisch .... ich weiß aber auch, dass das in 90% der Fälle nicht stimmt. <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="😉"
    /><br />
Gerade bei solchen &quot;Standardaufgaben&quot; darf man davon ausgehen, dass sehr viele (und darunter sehr viel bessere) Programmierer dafür Lösung erarbeitet haben - und ein Ergebnis davon ist z.B. die STL (und boost).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214282</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Jan 2007 09:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Wiederholt vorkommene Zeichen elemenieren on Mon, 22 Jan 2007 12:06:43 GMT]]></title><description><![CDATA[<p>harry20204 schrieb:</p>
<blockquote>
<p>Ist es nicht möglich die Aufgabe zu lösen auf dem Wege wie ich angefangen habe ???Gruß</p>
</blockquote>
<p>mit hilfe der klasse string würds schon n bisschen schöner aussehen aber hier hast du mal n ansatz der auf C-strings basiert, also so wie du die aufgabe schon begonnen hast.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
using namespace std;

bool contains(const char ch,const char* const str)
{
     for (int i=0;str[i]!=0;i++)
         if (str[i]==ch)
            return true;
     return false;
};

int main()
{
    char eingabe[100];
    char* str=0;
    cin&gt;&gt;eingabe;
    str=new char[strlen(eingabe)+1]; //+1 für NUL
    str[0]=0;// strncat hängt nur an einen nullterminierten String an...
    for (int i=0;eingabe[i]!=0;i++)
    {
        if (!contains(eingabe[i],str))
           strncat(str,&amp;eingabe[i],1);
        else
            continue;
    };
    cout&lt;&lt;str;
    delete [] str;    
};
</code></pre>
<p>aber achtung: cin liest nur bis zum ersten leerzeichen ein. ich glaube cin.getline() oder so wär eher das richtige dafür. so klappts jedenfalls. der zweite parameter der funktion soll ein readonly zeiger sein und auch der speicherbereich soll &quot;readonly&quot; sein, weiss aber nimmer so genau ob das der richtige weg ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214392</guid><dc:creator><![CDATA[bill bones]]></dc:creator><pubDate>Mon, 22 Jan 2007 12:06:43 GMT</pubDate></item></channel></rss>