# Buchstaben ersetzen



## Zuecho (9. April 2007)

Hallo ich habe folgendes Problem:
ich möchte in einer Textbox ein Text reinschreiben und es sollen die 5 häufigsten Buchstaben ausgetauscht werden. z.B. "Heute scheint die Sonne" und jetzt soll der Buchstabe "e" ersetzt werden mit "y"  "Hyuty schyint diy Sonny".

Wenn Ihr Ideen habt würde ich mich sehr freuen Danke.


----------



## DrSoong (9. April 2007)

Dazu kennt VB den Befehl *Replace()*, sieht so aus:

```
'Vorher den Inhalt der Textbox in eine Variable
 sText = Text1.Text
 'Syntax:
 'Text = Replace(Text, Text der ersetzt werden soll, Text durch den ersetzt werden soll)
 'also in deinem Fall:
 sText = Replace(sText, "e", "y")
 'und wieder zurück in die Textbox
 Text1.Text = sText
```


Der Doc!


----------



## Zuecho (10. April 2007)

Okay das ist schon mal gut.
Aber dann ist ja noch das Problem mit den häufigsten Buchstaben austauschen wie bekomme ich das hin das er mir die 5 häufigsten Buchstaben austauscht.
Also man muss doch irgendwie die Buchstaben zählen können mit einem Befehl?


----------



## kuhlmaehn (10. April 2007)

Hi, ich hab im moment keine Ahnung ob das auch besser zu lösen ist aber ich hab mal eben was gemacht vielleicht hilft es dir ja.
Es wird am Anfang alles zu kleinen Buchstaben geändert, da nur diese auf die häufigkeit überprüft werden (also von a-z), es wird nur das häufigste ersetzt und wenn keins am häufigsten ist wird das ersten genommen.
Das ist aber bestimmt alles anpassbar. Hier dir function:


```
Function HoechstErs(Text, Ersatz)

Dim Buchst(26)

stri = LCase(Text) 'Lcase: macht alle Buchstaben klein

For n = 1 To Len(stri)

    For m = 1 To 26
    
    If Mid(stri, n, 1) = Chr(96 + m) Then '96 ist das Zeichen vor dem a
    Buchst(m - 1) = Buchst(m - 1) + 1
    End If
    
    Next m

Next n

Dim hoechst

For x = 0 To 25

    If Buchst(x) > Buchst(hoechst) Then hoechst = x 'vergleichen welches am höchsten ist

Next x

HoechstErs = Replace(stri, Chr(97 + hoechst), Ersatz)

End Function
```

aufrufen dann zB


```
Private Sub Command1_Click()
Text1.Text = HoechstErs(Text1.Text, "x")
End Sub
```
Also.. nicht wirklich sauber programmiert und bestimmt gibt es eine bessere Lösung 
Aber wenn du es anpassen willst müsstes du bei der "Überprüfstelle" anstelle von chr vielleicht doch dein Array manuell füllen mit allem was überprüft werden soll. Oder alles von 0-255, oder wie weit das reicht, nehmen.
Und wenn du auch die 2. und 3. häufigsten willst würde ich das alles nochmal wiederholen aber vorher den höchsten Wert auf 0 setzen. Müsste leicht anzupassen sein.
Achso und für den Fall, dass keins häufiger ist bräuchtest du noch eine Abfrage.
Ich hoffe das hilft dir =)


----------



## Ein_Freund (10. April 2007)

Hallo Zuecho,

hab' da auch mal einen Vorschlag. Die Komplexität beläuft sich hierbei lediglich auf die Anzahl der verschiedenen charackters im Original-String:

```
Dim charCount%
Dim myStr$, newStr$, curChar$, savChar$
myStr = LCase("Heute scheint die Sonne")
newStr = myStr 'myStr bleibt unverändert; newStr wird verarbeitet
charCount = 0

Do
    curChar = Left(newStr, 1) 'aktueller Buchstabe
    newStr = Replace(newStr, curChar, "") 'aktueller Buchstabe wird entfernt
    If Len(myStr) - Len(Replace(myStr, curChar, "")) > charCount Then 'Anzahl des aktuellen Buchstaben ermitteln
        charCount = Len(myStr) - Len(Replace(myStr, curChar, "")) 'ggf. neue Anzahl speichern
        savChar = curChar 'entsprechenden Buchstaben speichern
    End If
Loop Until newStr = ""

MsgBox "Grösste Häufigkeit: " & charCount & " mal " & savChar
MsgBox Replace(myStr, savChar, "y")
```

Auch hier gilt: Sind mehrere Buchstaben mit der grössten Häufigkeit vorhanden, bleibt der erste Treffer gespeichert.

Gruß


----------



## Zuecho (10. April 2007)

Okay danke für die Antworten damit werde ich wohl weiter kommen.
Aber eine frage noch gibt es auch einen Lösungsweg mit Case also jetzt z.B "Case is a" , "Case is b" und so weiter weil das würde ich dann viel übersichtilicher finden.
Also das immer die Anzahl von den Buchstaben in den jeweiligen Buchstaben gespeichert würd und dann am Ende ermittelt würd welche am häufigsten da sind.


----------



## Zuecho (13. April 2007)

Okay danke es Funtioniert jetzt so wie ich es mit gedacht habe aber eine Frage noch. Wie bekomme ich die Buchstaben am Ende wieder Groß die am Anfang Groß waren?


----------



## Ein_Freund (14. April 2007)

Wenn der Buchstabe mit der grössten Häufigkeit ermittelt wurde, ersetzt Du im Original-String einfach alle kleinen und alle grossen Buchstaben.



```
'savChar - Buchstabe mit der grössten Häufigkeit
'angelehnt an die vorherigen posts  - ersetzen durch "y" bzw. "Y"
myStr = Replace(myStr, savChar, "y")
myStr = Replace(myStr, UCase(savChar, "Y"))
```

Dazu darfst Du natürlich nicht den Original-String verändern, oder Du speicherst ihn vorher noch irgendwo zwischen...

Gruß


----------

