Buchstaben ersetzen

Zuecho

Grünschnabel
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.
 
Dazu kennt VB den Befehl Replace(), sieht so aus:
Visual Basic:
 '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!
 
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?
 
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:

Visual Basic:
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

Visual Basic:
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 =)
 
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:
Visual Basic:
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ß
 
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.
 
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?
 
Wenn der Buchstabe mit der grössten Häufigkeit ermittelt wurde, ersetzt Du im Original-String einfach alle kleinen und alle grossen Buchstaben.


Visual Basic:
'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ß
 
Zurück