Einem String nach jedem Buchstaben ein Leerzeichen geben ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Readme :roll:
Und ja, er schnippelt den String dann bis zum Ende...
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

So, hier dann mal meine Prozedur, die euch um Längen schlägt (siehe Zeitmessungen unten):

Code: Alles auswählen

Procedure.s Spazifize(string.s)
	Protected *pos.Character=@string, result$=Space(StringByteLength(string)*2)
	Protected *result.Character=@result$
	While *pos\c
		*result\c=*pos\c
		*pos+SizeOf(Character)
		*result+SizeOf(Character)*2
	Wend
	ProcedureReturn result$
EndProcedure

Debug Spazifize("Ich bin ein String.")
Vergleicht mal folgende Werte:
  • res1 = 1094 ms (milan)
  • res2 = 781 ms (macros)
  • res3= 94 ms (and51)
Werte natürlich ohne Debugger, etc., auf (m)einem 3,4 GHz-DualCore ermittelt.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Autsch, das ist gut :allright:
Und jetzt das ganze noch in Assembler... :lol:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Thooooorium, dein Typ wird verlangt! :D
Also ich kann ein bisschen MOV, INC und DEC aber dann hört's auf... :)

P.S.: Danke für das Lob! :allright:

P.P.S.: du hast was geschrieben von wegen, um deinen Coe zu beschleunigen, nimmst du Trim()? Das geht nicht, dann schneidest du nänmlich auch alle Leerzeichen rechts weg, doch nach dem letzten Zeichen soll ja auch ein Leerzeichen kommen, oder? :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

AND51 hat geschrieben:P.P.S.: du hast was geschrieben von wegen, um deinen Coe zu beschleunigen, nimmst du Trim()? Das geht nicht, dann schneidest du nänmlich auch alle Leerzeichen rechts weg, doch nach dem letzten Zeichen soll ja auch ein Leerzeichen kommen, oder? :wink:
Öhm, nö. Oder?
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

milan1612 hat geschrieben:EDIT:
Wenn ich den Check komplett rausnehme und dann am Schluss
einfach Trim() nehme ist meine schneller:

Code: Alles auswählen

Procedure.s Spacifize(string.s)
  Protected newstr.s
  Protected *ptr.Character = @string
  While *ptr\c
    newstr + " " + Chr(*ptr\c)
    *ptr + SizeOf(Character)
  Wend
  ProcedureReturn Trim(newstr)
EndProcedure
Doch hier... Aber wie gesagt, das allerletzte Zeichen muss immer ein Leerzeichen sein, schließlich soll jedem Buchstaben ja ein Leerzeichen folgen. Dein Trim() bewirkt jedoch, dass links und rechts Leerzeichen abgeschnitten werden. genau genommen entspricht dies nicht der "Aufgabenstellung". :wink:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

@AND51

Toll /:-> :allright: Brauch mein Code nicht mehr reinstellen. Gleiche Lösung :allright:

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Danke sehr, mk-soft! :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

AND51 hat geschrieben:
milan1612 hat geschrieben:EDIT:
Wenn ich den Check komplett rausnehme und dann am Schluss
einfach Trim() nehme ist meine schneller:

Code: Alles auswählen

Procedure.s Spacifize(string.s)
  Protected newstr.s
  Protected *ptr.Character = @string
  While *ptr\c
    newstr + " " + Chr(*ptr\c)
    *ptr + SizeOf(Character)
  Wend
  ProcedureReturn Trim(newstr)
EndProcedure
Doch hier... Aber wie gesagt, das allerletzte Zeichen muss immer ein Leerzeichen sein, schließlich soll jedem Buchstaben ja ein Leerzeichen folgen. Dein Trim() bewirkt jedoch, dass links und rechts Leerzeichen abgeschnitten werden. genau genommen entspricht dies nicht der "Aufgabenstellung". :wink:
Dann eben LTrim() :lol:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Jo :lol:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten