Hi, wir sollen ein Programm schreibem, das alle (a) e i o u in a\'s umwandelt. Etwa "Drei Chinesen" in "Dra Chanasan".
        
        Mein Quelltext macht dies zwar, aber er bei mir kommt (was klar ist):
        "Draa Chanasan" raus, also 2x a wegen "e" und "i". Nun habe ich mir überlegt wie ich diese Doppel-Buchstaben umgehe. Meine Idee seht ihr anhand der 2. IF Anweisung:
        
        AnsiString Quelle="aeiou",
        Ziel ="aaaaa";
        int k;
        AnsiString konv;
        for (int i=1;i k=1;
        int help;
        help = i-1;
        while(k k=k+1;
        }
        if(k KonvText.Delete(i,1);
        KonvText.Insert(Ziel.SubString(k,1),i);
        }
        // BIS HIERHIN GEHT ES, ABER HALT MIT DEN DOPPELBUCHSTABEN
        
        if(Ziel.SubString(k,1),help == Ziel.SubString(k,1),i) {
        KonvText.Delete(i,1);
        }
        }
        
        So aber ich merke gerade das das Müll ist, aber ich hab gerade echt keinen Schimmer. Meine Idee war halt, das ich vergleiche ob 2 gleiche Zeichen (dewegen i und help = i-1)) nebeneinader liegen und wenn JA dann das erste löschen. Aber so funktioniert das nicht. Bitte helft mir mir,
        
        ICh bitte euch ausnahmsweise KEINE neuen Sachen einzubauen, denn ich versteh das eh nicht.
      
Programmieren - alles kontrollieren 4.946 Themen, 20.742 Beiträge
          //Dreichinesen.cpp -Sicromoft- [www.EQuark.tk]
          #include
        
          spitzeklammerauf klasse spitzeklammerzu
          jaja naürlich must du "iostream" und "string" einbinden lol
        
          Beim posten von quelltext müssen die spitzen klammern (zumindest die öffnende "<") codiert angegeben werden.
          Also statt z.b.
          for(i=0;i<10;i++){}
          muss das stehen
          for(i=0;i<10;i++){}
          oder bei
          #include <string.h>
          eben
          #include <string.h>
          
          Es gibt wohl auch tools und editoren, die aus sourcecode html machen können und auch online gibt es sowas (z.b. CodeColorizer -- The online source code syntax highlighter for ASP C C++ Clipper Delphi HTML Java JavaScript Pascal Visual Basic)
          
          mr.escape
          
          
          
        
          War das jetzt ein Fehler das ich euch vorenthalten habe, das ich das ganze mit dem C++ Builder gemacht habe... ? Ist eine Windows Anwendung. Weil ich habe keinen Plan was ihr da geschrieben habt. Ich will doch nur den Text an Stelle A mit dem Text an Stelle A+1 vergleichen und wenn der gleich ist A löschen. Mehr nicht. Die Strings funktionieren doch.
          
          GreeTz Selecta
        
          ACHTUNG
          
          Damit wär das ein für alle mal geklärt...
          http://mitglied.lycos.de/sicromoft/dc.txt
          
          CU
          DaWoo
        
          Statt umlaut(bzw. uml) wäre "vokal" angebrachter ;)
          und statt
          
          if (uml(StrE[i+1])){
            //wenn position i+1 auch ein umlaut ist
           } //skippen
           else //sonst "a" erfassen
          
          sollte
          
          if (i==0 || !uml(StrE[i-1]))
          
          stehen, da ansonsten am ende der zeichenkette ein zeichen hinter dem ende getestet würde (i+1).
          
          mr.escape
        
          Tatsache ^^ Bin wohl ein Pisa Opfer
          
          Oder-Nicht Verknüpfung cool, soweit war ich noch nicht gegangen in C
          
          -hab die txt nochmal updated-
          
          trotzdem wird im Durchgang 0 bei dir StrE[-1] geprüft ABER
          ich habs getestet (leerer string position -100 bis +100 lesen) und festgestellt das in diesen fällen immer leerzeichen zurückgegeben werden. kein Datenmüll oder so. (nur mit Schreiben klappts halt nicht hehehe).
          
          Trotzdem ist deine Version Smarter ;)
        
Aber nur wenn der compiler komplett defekt ist. Bei i==0 wird die bedingung nämlich schon erfüllt und damit findet die zweite prüfung nicht statt. Darum ist auch die reihenfolge wichtig.
mr.escape
          Danke, aber hab's nun so gemacht:
          
          for (int i=1;i if (KonvText[i] == 'a' && KonvText[i+1] == 'a') {
          KonvText.Delete(i,1);}
          
          Das habe ich außerhalb der if-Schleife geschieben, d.h. am Ende überprüft er dies.
          Das musst ich lediglich mit eiou noch machen. Klappt einwandfei.
          
          Das ist eine Lösung die ich logisch finde.
          
          Trotzdem danke an alle.
        
          Ich kenne die details zu AnsiString nicht, nehme aber an, dass das erste zeichen den index 0 hat und das letzte Length()-1 (mir fällt auf anhieb kein fall mit einem startindex!=0 ein).
          Wenn das stimmt, ist die schleife zwei zeichen zu lang (einmal wegen "<=" statt "<" und überprüft dazu auch noch das letzte zeichen, ob dahinter noch etwas bestimmtes ist -> kann ja nicht, ist ja schließlich das letzte!), lässt dafür aber das erste zeichen aus.
          Statt:
          for (int i=1;i<=KonvText.Length();i++) {
          müsste es damit:
          for (int i=0;i<KonvText.Length()-1;i++) {
          heißen.
          
          mr.escape
        
          Noch was zum löschen.
          Nachdem ein zeichen gelöscht wurde, rutscht ja der ganze rest nach vorne. Beim nächsten durchgang der "for(i ..."-schleife wird das aber nicht beachtet, also ein zeichen nicht geprüft. Darum muss die anweisung bei doppelten zeichen statt:
          {
            KonvText.Delete(i,1);
          }
          so lauten:
          {
            KonvText.Delete(i,1);
            i--;
          }
          
          durch das i--; wird das i++ im for befehl kompensiert und an der selben stelle nach dem löschen erneut getestet (ist nichts mehr zum testen da, endet die schleife).
          
          mr.escape
        
