Wort/Text umkehren

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    Wort/Text umkehren

    ALso ich habe mir diese Funktion geschrieben um ein Wort oder einen längeren Text umzukehren (also z.b "Hallo" in "ollah"):

    VB.NET-Quellcode

    1. Private Function MirrorWord(ByVal word As String, Optional ByVal firstCharToUpper As Boolean = True)
    2. 'Buchstaben-Liste erstellen
    3. Dim charList As New List(Of Char)
    4. '@ einfügen
    5. For i = 0 To word.Length * 2 Step 2
    6. word = word.Insert(i, "@")
    7. Next
    8. 'Splitten
    9. Dim splitter As String() = word.Split({"@"c}, StringSplitOptions.RemoveEmptyEntries)
    10. 'In Liste schreiben
    11. For i = 0 To splitter.Length - 1
    12. charList.Add(splitter(i).ToString())
    13. Next
    14. 'Umkehren (Variablen erstellen)
    15. Dim count As Integer = charList.Count - 1
    16. Dim reversedWord As String = ""
    17. 'Umkehren
    18. For i = 0 To charList.Count - 1
    19. count -= 1
    20. reversedWord += charList(i).ToString()
    21. Next
    22. Return reversedWord
    23. End Function


    Nur wenn ich diese Funktion jetzt aufrufe passiert nichts:

    VB.NET-Quellcode

    1. TextBox1.Text = MirrorWord("Hallo")


    Was ist jetzt an der Funktion falsch?

    MFG
    PhoenixBlaster :)
    Wie kann man so ein triviales Problem denn auf so viele Zeilen ausweiten? :P
    So sollte es funktionieren:

    VB.NET-Quellcode

    1. <Extension>
    2. Public Function Reverse(s As String) As String
    3. Dim result = String.Empty
    4. For i = s.Length - 1 To 0 Step -1
    5. result &= s(i)
    6. Next
    7. Return result
    8. End Function
    viel zu umständlich. du kannst das wort direkt untersuchen.
    zauberwort heißt Left() oder Right()-Funktion.
    dann könntest du z.b. es so machen:

    VB.NET-Quellcode

    1. dim word as string="....."
    2. for i=1 to word.textlength step 1
    3. charlist.insert(i, right(word.text,i))
    4. next


    oder machst es über die ascii-funktion wenn de gaaaaanz viel lange weile hast ;)
    Es gibt eine passende Extension für sowas:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim s As String = "Hallo"
    3. Dim s1 As String = String.Join("", s.Reverse())
    4. MessageBox.Show(s1)
    5. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    VB.NET-Quellcode

    1. Imports System.Runtime.CompilerServices
    2. Module Module1
    3. <Extension>
    4. Public Function Reversing(ByVal input As String) As String
    5. Return String.Concat(input.Reverse)
    6. End Function
    7. End Module

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim test As String = "Hallo Welt wie gehts"
    4. MessageBox.Show(test.Reversing)
    5. End Sub
    6. End Class
    @Eierlein
    Die StrReverse-Funktion ist aus dem Microsoft.VisualBasic-Namespace und der ist böööse :D.
    So wie es RushDen gemacht hat finde ich es am saubersten, mit folgendem Code geht es aber noch etwas schneller:

    VB.NET-Quellcode

    1. Imports System.Runtime.CompilerServices
    2. Module StringExtensions
    3. <Extension>
    4. Public Function Reversed(ByVal input As String) As String
    5. Return input.Reverse.ToArray
    6. End Function
    7. End Module

    Bei mir braucht meine Methode immer ca. 20% weniger Zeit, wobei es sich hier um minimale Unterschiede handelt. Getestet habe ich mit einem 155 Zeichen langen String jede Methode 10'000 Mal.
    Mit nem Stringbuilder gehts noch schneller:

    VB.NET-Quellcode

    1. <Extension>
    2. Public Function Reverse(s As String) As String
    3. Dim result As New StringBuilder(s.Length)
    4. For i = s.Length - 1 To 0 Step -1
    5. result.Append(s(i))
    6. Next
    7. Return result.ToString()
    8. End Function
    Ich seid doch bestimmt wieder am Profilen. Mich würde interessieren, wie das hier gegen den Stringbuilder ausfällt:

    VB.NET-Quellcode

    1. Dim str As String = "abc"
    2. Dim len As Integer = str.Length - 1
    3. Dim chars(len) As Char
    4. For i As Integer = 0 To len
    5. chars(len - i) = str(i)
    6. Next
    7. Dim strReversed As String = New String(chars)


    Wer es unsicher mag:

    C-Quellcode

    1. var str = "abc";
    2. var len = str.Length;
    3. unsafe
    4. {
    5. char* chars = stackalloc char[len--];
    6. for (int i = 0; i <= len; ++i)
    7. chars[len - i] = str[i];
    8. var strReversed = new string(chars);
    9. }
    Von meinem iPhone gesendet