Seite 1 von 2

Wörter Drehen V 1.00

Verfasst: 19.04.2009 19:16
von Andesdaf
kein großer Trick dabei, einfach für alle die zu faul sind das selber zu coden
(braucht sowiso auch nur 5 Min, wollte es aber trotzdem reinstellen).

Code: Alles auswählen

Procedure.s TurnWords(psString.s)
  String.s = psString
  Leer.s   = ""
  Lenght.i = Len(String)
  For i=0 To Lenght-1
    Leer+Mid(String,Lenght-i,1)
  Next
  ProcedureReturn Leer
EndProcedure

Debug TurnWords("Purebasic ist eine schöne Programmiersprache")

Verfasst: 19.04.2009 19:30
von AND51
Und hier gleich mal die Profi-Version davon. Viel schneller, weil arbeitet mit Pointern:

Code: Alles auswählen

Procedure ReverseString(*Text.Character) 
   Protected *ende.Character=*Text+MemoryStringLength(*Text)<<#PB_Compiler_Unicode-SizeOf(Character) 
   While *Text < *Ende 
      Swap *Text\c, *ende\c 
      *Text+SizeOf(Character) 
      *ende-SizeOf(Character) 
   Wend 
EndProcedure 

test$="Hallo" 
ReverseString(@test$) 
Debug test$
Verändert direkt den übergebenen String.


Btw, diesen Thread hier gab es schon einmal.

Verfasst: 19.04.2009 20:06
von KeyKon
Und der Unterschied is heftig:

Code: Alles auswählen

Procedure ReverseString(*Text.Character)
   Protected *ende.Character=*Text+MemoryStringLength(*Text)<<#PB_Compiler_Unicode-SizeOf(Character)
   While *Text < *Ende
      Swap *Text\c, *ende\c
      *Text+SizeOf(Character)
      *ende-SizeOf(Character)
   Wend
EndProcedure

Procedure.s TurnWords(psString.s)
  String.s = psString
  Leer.s   = ""
  Lenght.i = Len(String)
  For i=0 To Lenght-1
    Leer+Mid(String,Lenght-i,1)
  Next
  ProcedureReturn Leer
EndProcedure

#Check = 500000

OpenConsole()
Print ("Pointer... ")
test$ = "Purebasic ist eine schöne Programmiersprache"
Delay(100)
time = ElapsedMilliseconds()
For x = 0 To #Check
  ReverseString(@test$)
Next
pointer = ElapsedMilliseconds()-time
PrintN(StrF(pointer/1000,2)+"s")
Print ("String... ")
test$ = "Purebasic ist eine schöne Programmiersprache"
Delay(100)
time = ElapsedMilliseconds()
For x = 0 To #Check
  test$ = TurnWords(test$)
Next
string = ElapsedMilliseconds()-time
PrintN(StrF(string/1000,2)+"s")
PrintN("Pointer ist "+StrF(string/pointer,1)+" mal schneller als String")
Input()
Pointer... 0.13s
String... 7.52s
Pointer ist 57.4 mal schneller als String

Verfasst: 19.04.2009 20:09
von X360 Andy

Code: Alles auswählen

Procedure.s DrehWort(DrehWort$)
  DrehWortLength = Len(DrehWort$)
  For DrehWortanfang = 1 To Drehwortlength
    DrehWortAusgabe$ + Mid(DrehWort$, DrehWortLength-DrehWortAnfang + 1, 1)
  Next : ProcedureReturn DrehWortAusgabe$
EndProcedure

Debug Drehwort("let it dreh")
Dies kann mithalten :D

EDIT
Verdammt das is ja fast das gleiche wie im ersten Post :?

Bei mir is das aber relativ schnell im vergleich

EDIT2
Verarschen ?
Damals als ich das getestet habe , war das fast genauso schnell.
Jetzt sagt der das es 71mal langsamer ist.

Verfasst: 19.04.2009 20:42
von AND51
KeyKon hat geschrieben:Und der Unterschied is heftig:
Bei mir ist Pointer (0,09 s) sogar 93,8 Mal schneller als String (8,84 s).

Verfasst: 19.04.2009 20:55
von cxAlex
Pointer... 0.05s
String... 3.73s
Pointer ist 79.4 mal schneller als String

Verfasst: 19.04.2009 22:37
von rolaf
Pointer... 0.05s
String... 3.73s
Pointer ist 79.4 mal schneller als String
Juhu, da ich es ein zwei mal im Leben benutze habe ich jetzt deutlich mehr Zeit zur Verfügung. <)

:allright: !thcam nniS eis ow ad ,tug tsi gnureimitpO :thetsrev hcslaf thcin hcim rhI timaD

Verfasst: 19.04.2009 22:46
von KeyKon
Wiso? Das ganze steht doch stellvertretend dafür das man wenn man massiv Stringoperationen durchführen muss mit den Pointern besser gestellt ist...

Verfasst: 19.04.2009 23:09
von edel
KeyKon hat geschrieben:Wiso? Das ganze steht doch stellvertretend dafür das man wenn man massiv Stringoperationen durchführen muss mit den Pointern besser gestellt ist...
Nein, unterschiedlicher koennen die Funktionen ja gar nicht sein, auch wenn
das Ergebnis gleich ist. Beide sind brauchbar, wobei ich die von and51, so
nicht nutzen wuerde, da sie viel zu unsicher ist.

Verfasst: 19.04.2009 23:41
von KeyKon
Inwiefern unsicher?