Array nach identischen Werten durchsuchen und Elemente vertauschen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von vbmatze.

    Array nach identischen Werten durchsuchen und Elemente vertauschen

    Hallöchen liebe VB'ler hab da mal ne Frage offen:

    Ich habe einen Passwortgenerator gebastelt und möchte dem User die Möglichkeit geben, identische Zeichen direkt nebeneinander zu vermeiden. Die Frage ist wie mache ich das am Besten.
    Meine Überlegung war es, das Array vom Typ Char zu durchlaufen(in diesem Array ist das Passwort drin) und dann wollte ich die Einzelnen Elemente Im Array miteinander vergleichen. Wenn zwei identische Elemente nebeneinander sind soll eines der Elemente die Position mit einem Anderen tauschen. Ist das überhaupt ein vernünftiger Ansatz? Wenn ja, wie kann ich sowas realisieren? Ich bitte um Vorschläge.

    Mit freundlichen Grüßen und vielen Dank im Voraus für eure Hilfe

    vbmatze
    Gibt es denn ne andere Möglichkeit da ran zu gehen? Bin leider ratlos.

    Ich dachte mir das so: Mein Char Array könnte z.B. so aussehen: {"w", "m", "o", "a", "a", "b"}. Dann hätte ich gedacht kann man ja das Array durchlaufen und z.B. Element 4 und 5 tauschen damit das Ergebnis so aussieht: {"w","m","o","a","b","a"} oder ist sowas gar nicht machbar?
    array-elemente kann man ganz problemlos vertauschen. Man braucht dazu ein temporäres Element. gugge zb

    VB.NET-Quellcode

    1. <Extension()> _
    2. Public Sub Swap(ByVal Subj As IList, ByVal I1 As Integer, ByVal I2 As Integer)
    3. Dim Tmp = Subj(I1)
    4. Subj(I1) = Subj(I2)
    5. Subj(I2) = Tmp
    6. End Sub
    ABer ob das im falle PW-generator so sinnvoll ist...
    falls es noch jemand interessiert, ich habe mal kurz einen beispiel geschrieben:
    (Auf einer Form mit einer TextBox TxtPW, in der das Passwort steht...)


    VB.NET-Quellcode

    1. Dim LengthPW As String = TxtPW.Text.Length 'Die Anzahl der Zeichen in eine Variable schrieben
    2. For i As Integer = 1 To LengthPW - 1 Step 1
    3. If TxtPW.Text.Substring(i - 1, 1) = TxtPW.Text.Substring(i, 1) Then
    4. TxtPW.Text = TxtPW.Text.Replace(TxtPW.Text.Substring(i, 1) & TxtPW.Text.Substring(i - 1, 1), "gh")
    5. End If
    6. Next



    Hier wird jetzt einfach der ursprüngliche text durch ein "gh" ersetzt, alternativ kannst du das ja auch per Zufall machen lassen oder einfach ein neues PW generieren
    Vielen Herzlichen Dank für eure Lösungsvorschläge da hat mir wirklich weitergeholfen.
    @ ErfinderDesRades: Ihre Lösung habe ich auch in einem anderen Forum gefunden und präferiere diese. Ob das in einem PW-Generator so sinnvoll ist...nun ja habe ich mich auch gefragt aber die Aufgabenstellung sieht das so vor.

    @Telcrome: Sehr interessanter Lösungsvorschlag, ich werde das auf jeden Fall probieren und für zukünftige Aufgabenstellungen im Auge behalten. Anstelle die Elemente zu verschieben und einfach ein neues PW zu generieren habe ich auch schon gedacht allerdings wäre das nicht mit meiner Aufgabenstellung konform.
    Ich habe inzwischen festgestellt: Viele Wege führen nach Rom^^

    Wenn die Funktion komplett ist werde ich den QC hier posten. Aber nochmals vielen Dank an alle für eure Hilfe.