String rückwärts wiedergeben

  • Hi,

    hab hier eine Kleinigkeit gebastelt, ob sinnvoll oder nicht, entscheidet jeder für sich ;)
    (hab ebenfalls das Forum nach einer ähnlichen Funktion durchsucht, aber nichts entdeckt, sollte es schon vorhanden sein, bitte ich vielmals um Entschuldigung ^^)

    [autoit]


    dim $len, $final
    dim $text = inputbox("Reverse","Text eingeben:")

    [/autoit][autoit][/autoit][autoit]

    reverse($text)

    [/autoit][autoit][/autoit][autoit]

    func reverse($text)
    dim $len = stringlen($text)

    [/autoit][autoit][/autoit][autoit]

    while $len > 0
    $final = $final & stringmid($text,$len,1)
    $len = $len -1
    WEnd
    return $final
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    msgbox(64,"Ausgabe",$final)

    [/autoit][autoit][/autoit][autoit]

    Exit

    [/autoit]

    P.S.: Ich hoffe die Variablennamen sind diesmal sinnvoll vergeben, um einer sinnfreien Kritik zu entgehen! :thumbdown:

    Grüße
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ok, das ist ein Wort (auch wenn die Funktion in "String.au3" voll umständlich is :D)

    Aber gibts auch schon sowas?
    (Selbstverständlich mit meiner Version des "_StringReverse()" (Achtung, Spielerei!)):

    [autoit]


    dim $cnt, $rtx, $txt, $txr, $final, $len, $txt2

    [/autoit][autoit][/autoit][autoit]

    dim $1 = inputbox("Eingabe","Text")

    [/autoit][autoit][/autoit][autoit]

    msgbox(64,"Split-Reverse",spl($1))

    [/autoit][autoit][/autoit][autoit]

    func spl($1)

    [/autoit][autoit][/autoit][autoit]

    dim $cnt = stringlen($1)
    dim $rtx = reverse($1)

    [/autoit][autoit][/autoit][autoit]

    while $cnt > 0
    $txt = stringleft($rtx,$cnt) & " " & $txt
    $txr = $txr & " " & stringright($1,$cnt)
    $cnt = $cnt -1
    WEnd
    Return $txr & "-" & $txt
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    func reverse($txt2)

    [/autoit][autoit][/autoit][autoit]

    dim $len = stringlen($txt2)

    [/autoit][autoit][/autoit][autoit]

    while $len > 0
    $final = $final & stringmid($txt2,$len,1)
    $len = $len -1
    WEnd
    Return $final
    EndFunc

    [/autoit]

    Grüße
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • So ist es kürzer.

    [autoit]

    Func _reverse($sString)
    Local $sNewString=""
    For $i=StringLen($sString) to 1 Step -1
    $sRight=StringRight($sString, 1)
    $sString=StringTrimRight($sString, 1)
    $sNewString &= $sRight
    Next
    Return $sNewString
    EndFunc

    [/autoit]

    €dit: Sorry is doch nich das gleiche.
    Hatte nich gesehen das du alle schritte zum umgekehrten string mit ausbist.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

    Einmal editiert, zuletzt von monkey (27. Oktober 2010 um 14:22)

  • Hatte mir auch mal ein paar string udfs gemacht hier mal alle, auch mit einer zum umdrehen

    Spoiler anzeigen


    ;(C) Simon (https://autoit.de/www.autoit.de)

    [autoit]

    ;===============================================================
    ; Function....: _StringTurn
    ; Syntax......: _StringTurn($iString)
    ; Beschreibung: Beginnt einen String von Hinten
    ; Parameter(s): $iString = String
    ; return Value: $iTurn = Fertiger String
    ; Author(s)...: Simon (simon)
    ;===============================================================
    Func _StringTurn($iString)
    $iLengt = StringLen($iString)
    If $iLengt <> "" Then
    $iTurn = ""
    For $i = 0 To $iLengt -1 Step 1
    $iLetter = StringMid($iString,$iLengt - $i,1)
    $iTurn &= $iLetter
    Next
    return $iTurn
    Endif
    EndFunc
    ; #FUNCTION#=======================================================
    ; Function Name ...: _StringNumSort
    ; Description .....: Sorts two numbers of the height
    ; Beschreibung ....: Sortiert zwei Zahlen ihrer Höhe nach
    ; Syntax ..........: _StringNumSort($iNumber1,$iNumber2)
    ; Parameter(s) ....: $iNumber1 = First Number
    ; $iNumber2 = Second Number
    ; Return Value(s) .: $iNumber = Return order of the Numbers
    ; @error = 0
    ; Author ..........: Simon
    ;==================================================================
    Func _StringNumSort($iNumber1,$iNumber2)
    IF $iNumber1 <> "" Or $iNumber2 <> "" Then
    IF $iNumber1 <> "" And $iNumber2 <> "" Then
    IF $iNumber1 > $iNumber2 Then
    $iNumber = $iNumber1 & $iNumber2
    return $iNumber
    elseif $iNumber2 > $iNumber1 Then
    $iNumber = $iNumber2 & $iNumber1
    return $iNumber
    elseif $iNumber2 = $iNumber1 Then
    $iNumber = $iNumber1 & $iNumber2
    return $iNumber
    Endif
    Endif
    Endif
    EndFunc
    ; #FUNCTION#=======================================================
    ; Function Name ...: _StringLengthSort
    ; Description .....: Sorts two Strings of the Length
    ; Beschreibung ....: Sortiert zwei Strings der länge nach
    ; Syntax ..........: _StringLengthSort($iString1,$iString2[,$iOpt = 1])
    ; Parameter(s) ....: $iString1 = First String
    ; $iString2 = Second String
    ; $iOpt = Could bei one of these
    ; | 1 = With all Spaces
    ; | 2 = Without all Spaces
    ; Return Value(s) .: $iNumber = Return order of the Words
    ; @error = 0
    ; Author ..........: Simon
    ;==================================================================
    Func _StringLengthSort($iString1,$iString2,$iOpt = 1)
    If $iString1 <> "" Or $iString2 <> "" Then
    IF $iString1 <> "" And $iString2 <> "" Then
    IF $iOpt = 2 Then
    If StringInStr($iString1," ") Then
    $iString1 = StringReplace($iString1," ","")
    IF StringInStr($iString2," ") Then
    $iString2 = StringReplace($iString2," ","")
    Endif
    Endif
    If StringInStr($iString2," ") Then
    $iString2 = StringReplace($iString2," ","")
    If StringInStr($iString1," ","") Then
    $iString1 = StringReplace($iString1," ","")
    Endif
    Endif
    Endif
    $iLength1 = StringLen($iString1)
    $iLength2 = StringLen($iString2)
    IF Not @error Then
    IF $iLength1 > $iLength2 Then
    $iSentence = $iString1 & " " & $iString2
    return $iSentence
    elseif $iLength1 < $iLength2 Then
    $iSentence = $iString2 & " " & $iString1
    return $iSentence
    elseif $iLength1 = $iLength2 Then
    $iSentence = $iString1 & " " & $iString2
    return $iSentence
    else
    return 0
    Endif
    else
    return 1
    Endif
    Endif
    Endif
    EndFUnc

    [/autoit]
  • Danke für die vielen Antworten :thumbup:

    Das sind halt alles noch Übungs-Scripts für mich, mach das noch nicht soooo lange, aber es is schon ein Erfolgserlebnis, wenn es genau das tut, was es soll :)

    Diese beiden Teile hatte ich fast 1:1 nachgebaut aus mIRC, da ist die Scriptsprache nochmal ein Stück anders und man wird zum Umdenken gezwungen.
    Mehr oder weniger perfekt für mich zum üben, würd ich sagen 8o.

    Ach nochwas: Ich bin hellauf begeistert von AutoIT, sollte für meine Firma ein Tool nachbauen, welches in "Macro Sheduler" geschrieben ist. Bin damit schon lange fertig und hab nichtmal die Hälfte an Codezeilen gebraucht :D. Abgesehen davon ists Freeware (ist das Macro-Ding nicht mehr!), hat nen end geilen Editor (SciTE) und n super Forum in deutscher Sprache, mit schnell antwortenden, netten 'Profis' ;).

    Grüße
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Ok, das ist ein Wort (auch wenn die Funktion in "String.au3" voll umständlich is :D)


    Stimmt irgendwie, aber man kann sie ja vereinfachen (und noch etwas schneller machen):

    [autoit]

    Func _StringReverse($s_String)
    Local $a_rev = DllCall("msvcrt.dll", "ptr:cdecl", "_strrev", "Str", $s_String)
    If @error Or $a_rev[0] = 0 Then Return SetError(1, 0, "")
    Return $a_rev[1]
    EndFunc ;==>_StringReverse

    [/autoit]
  • @Großvater: du musst schon die Variante für wstr verwenden, da sonst nicht alle Zeichen abgedeckt werden.

  • Hallo progandy,

    da kannst Du recht haben (ich komme ja von der anderen Seite), ändert aber nichts an der Grundaussage! ;)

  • Hi Großvater,


    vereinfacht oder nicht, meins läuft ohne "DLL" und ich habs total einfach aufgebaut, dass es jeder Anfänger verstehen müsste. Ich für meinen Teil hab mit Arrays erst angefangen und würde das glaub ich nicht so ohne weiteres auf die Art nachbauen können.

    Daher find ich meins sehr viel einfacher ;)

    Grüße
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Hallo x0r,

    nichts für ungut, ich verstehe schon, was Du meinst, aber der DllCall ist mit zunehmender Stringlänge um Größenordnungen schneller. Deshalb sind eigene Experimente für den praktischen Einsatz nicht wirklich empfehlenswert.

    @progandy: Da hast Du doch nicht recht. Sowohl die originale UDF als auch meine abgekürzte Fassung arbeiten ja mit der Run-Time Funktion _strrev(), und die kann definitiv nur nullterminierte ANSI/ASCII-Strings. Man könnte natürlich auch _wcsrev() aufrufen, das wäre dann aber eine funktionale Erweiterung.

  • @Großvater: Ursprünglich war _StringReverse eine AutoIt-Funktion. Erst in den letzten paar Versionen ist das geändert worden. Erst seitdem gibt es die ANSI-Einschränkung. Da hat wohl jemand nicht richtig aufgepasst ;)

    @xor: Zum Lernen ist so eine Funktion natürlich perfekt, der Lerneffekt hängt ja nicht von der Existenz anderer Funktionen ab.

  • x0r: Übrigens kannst du ruhig in beiden Funktionen (spl und reverse) die selbe Variable nutzen, also $txt. Da die Variable ja sowieso Lokal angelegt wird. Aber sonst gut zum erlernen.

    @progandy: Vielleicht sollte man in der Hilfe die ANSI-Einschränkung mit erwähnen.