German Buchstaben in Textbox addieren

MisterRieus

Member
Licensed User
Longtime User
Nabend Community,

Textbox1.text = "Test"

nun möchte ich gerne, dass alle Buchstaben in der Textbox geprüft werden und im label1 addiert werden, aber nicht die anzahl der buchstaben sondern welcher Buchstabe vom Alphabet es ist.

Bei "Test" wäre der Labelinhalt = 64 da:

T = 20ter Buchstabe
E = 6ter Buchstabe
S = 19ter Buchstabe
T = 20ter Buchstabe

Wenn jetzt textbox1.text = "22osd32," dann sollen auch nur die Buchstaben benutzt werden. Ist das irgendwie möglich?
 

diversity

Member
Licensed User
Longtime User
Hallo,

hier ein Lösungsansatz meiner Seits, stichpunktartig beschrieben, umsetzung findest du unten in C#


1.) Erstellen eines Strings mit sämtlichen Buchstaben und Zahlen = "abcdef...89"

2.) Umwandeln des Input String in ToLowerCase()
2.1 Jeden Char des Input durchgehen und nach dem IndexOf in dem String aus 1.) abfragen.

3.) Wenn der IndexOf einen Wert von <0 zurück gibt, konnte kein Index ermittelt werden, somit ist ein ungültiges Zeichen im Input vorhanden

4.) Wenn der IndexOf >= 26 ist, müssen wir -=26 rechenen, da es sich in unserem String aus 1. dann um eine Zahl handelt.

5.) Sobald wir ungültige Zeichen gefiltert haben, geprüft haben ob es eine Zahl ist und diese 'konvertiert' (4.) haben, können wir den Index auf unsere Ausgabe (Integer) drauf rechnen

6.) Sind wir alle Zeichen durchgegangen, geben wir unser Ergebnis aus.



Da ich momentan nichts in B4A aufgrund zeitlichen Mangels mache, hab ich hier nochmal kurz den Code in C# umgesetzt, soll einfach nur eine Grundlegende Idee sein, da mir momentan die B4A-Syntax nicht geläufig ist ^^


PHP:
int iResult = 0;
            int iIndex = 0;
            string sAlphaNumeric = "abcdefghijklmnopqrstuvwxyz0123456789";      //Alle verfügbaren Zeichen
            string sInput = "aJ8e2Hz";           //Inputstring egal ob static oder variable durch Eingabe

            sInput = sInput.ToLower();           //Alle Buchstaben klein machen



            foreach (char ch in sInput)
            {
                iIndex = sAlphaNumeric.IndexOf(ch) + 1;         //+1 => a = Buchstabe 1 jedoch Index 0

                if (iIndex >= 0)
                {
                    if (iIndex >= 27)               //Wenn höher als 26 + 1 = Zahlen
                    {
                        iIndex -= 27;
                    }
                    iResult += iIndex;
                }
                else //-1 wird bei einem ungültigen Zeichen ausgegeben
                {
                    throw new Exception("Ungültiges Zeichen im Input entdeckt");
                }

            }
            Console.WriteLine(iResult);         //Ergebnis Ausgeben

Ausgabe = 60



Ich hoffe ich konnte dir helfen, solltest dazu fragen haben einfach stellen :)

Gruß

Diversity
 
Last edited:

MisterRieus

Member
Licensed User
Longtime User
Habs leider nicht umsetzen können.
Hat jemand der basic4android nutzt vielleicht einen tipp für mich
wie man das umsetzen könnte?
 

klaus

Expert
Licensed User
Longtime User
Das kannst Du so machen:
B4X:
Sub btnTest_Click
    Dim txt As String
    Dim i, j As Int
    Dim Summe As Int
    
    txt = edtTest.Text.ToLowerCase
    Summe = 0
    For i = 0 To txt.Length - 1
        j = Asc(txt.CharAt(i)) - 96
        If j >= 1 AND j <= 26 Then
            Summe = Summe + j
        End If
    Next
    lblTest.Text = Summe
End Sub
Buchstaben mit Umlauten werden in dieser Routine nicht in Betracht gezogen, könnte man aber mit einbinden.
Beiliegend das Testprogramm.

Beste Grüsse.
 

Attachments

  • BuchstabenSumme.zip
    7.3 KB · Views: 183

MisterRieus

Member
Licensed User
Longtime User
vielen vielen dank klaus du bist der beste!
genau danach hab ich gesucht :)
wie kann man ö,ü usw einbinden?
 

klaus

Expert
Licensed User
Longtime User
Das könnte so aussehen:
B4X:
Sub btnTest_Click
    Dim txt As String
    Dim i, j As Int
    Dim Summe As Int
    
    txt = edtTest.Text.ToLowerCase
    Summe = 0
    For i = 0 To txt.Length - 1
        j = Asc(txt.CharAt(i)) - 96
        If j >= 1 AND j <= 26 Then
            Summe = Summe + j
        Else If j = 132 Then    ' ae
            Summe = Summe + 1
        Else If j = 150 Then    ' oe
            Summe = Summe + 15
        Else If j = 156 Then    ' ue
            Summe = Summe + 21
        End If
    Next
    lblTest.Text = Summe
End Sub
ae steht für ä
oe steht für ö
ue steht für ü

In der Routine wird für
ä 1 hinzugezählt wie a
ö 15 hinzugezählt wie o
ü 21 hinzugezählt wie u

Was Du dazu zählen willst kannst Du ändern.

Beste Grüsse.
 
Top