Strings kürzen, gibt es da ne bessere Lösung?
Übersicht

KirkZeroBetreff: Strings kürzen, gibt es da ne bessere Lösung? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo erstmal...
Folgendes Problem: eine Funktion liefert mir einen String, diesen möchte ich dann Zeichen für Zeiche (links beginnend) auswerten. Ich weiss, das man das mit einer schleife machen kann. Ich möchte jedoch gerne, nachdem ich das erste linke Zeichen ausgewertet hab, dieses aus dem String löschen, damit das nächste Zeichen dann an erster Stelle steht. Ich habe mit Hilfe der Bmax Hilfe nun diese Lösung erarbeitet: Code: [AUSKLAPPEN] a$ ="1234567890" Repeat Print a$ b$=Left(a$,1) 'Das erste Zeichen aus a$ in b$ speichern a$=Right(a$,a.length-1 ) Print b$ 'mit b$ irgendwas anstellen und dann das nächste Zeichen holen Delay (1000) If KeyHit(key_escape) Then End Until a$="" End Meine Frage: gibt es da noch ne eigene Funktion für, oder vielleicht eine bessere Lösung? hab eine menge zu BMax im internet gefunden und kam bis jetzt sehr gut klar, aber als ich dann mit Strings arbeiten wollte, habe ich nicht wirklich viele anhaltspunkte gefunden. |
||
No Brain, No Pain |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine wirklich kürzere Variante, aber ohne die Nutzung des BRL.Retro Moduls, wobei die Zeilen doch auch kürzer sind ![]() BlitzMax: [AUSKLAPPEN] a$ ="1234567890" |
||
Blessed is the mind too small for doubt |
KirkZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
DaysShadow hat Folgendes geschrieben: Keine wirklich kürzere Variante, aber ohne die Nutzung des BRL.Retro Moduls, wobei die Zeilen doch auch kürzer sind
![]() Dann gehe ich mal davon aus, das man das BRL.Retro Modul besser meiden sollte?! Dann weiss ich ja in zukunft bescheid, das ich für Strings auch die Funktionen für Arrays verwenden kann Danke für Deinen Lösungsansatz und kürzere Zeilen sind immer gut ![]() |
||
No Brain, No Pain |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Den Funktionsaufruf von Chr![]() MfG ich |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kleiner Speedtest:
Code: [AUSKLAPPEN] SuperStrict
Local doTest:Int[4] doTest[0] = False doTest[1] = True doTest[2] = True doTest[3] = True Local a:String Global t:Double SeedRnd(MilliSecs()) Print "creating string" For Local i:Int = 0 Until 100 a:+Chr(Rand(255)) Next For Local i:Int = 0 Until 12 'warning, exponential grows a:+a + a Next Print "string length: " + a.length If doTest[0] '##### Test A ##### Print "checking string Method A" t = MilliSecs() For Local i:Int = 0 Until a.Length Local b:String = Left(a, 1) a = Right(a, a.Length - 1) 'Print b Next t = MilliSecs() - t Print "duration A: " + t EndIf If doTest[1] '##### Test A2 ##### Print "checking string Method A2" t = MilliSecs() For Local i:Int = 0 Until a.Length Local b:String = Mid(a, i, 1) 'Print b Next t = MilliSecs() - t Print "duration A2: " + t EndIf If doTest[2] '##### Test B ##### Print "checking string Merthod B" t = MilliSecs() For Local i:Int = 0 Until a.Length Local b:String = Chr(a[i]) 'Print b Next t = MilliSecs() - t Print "duration B: " + t EndIf If doTest[3] '##### Test C ##### Print "checking string Merthod C" t = MilliSecs() For Local i:Int = 0 Until a.Length Local b:String = (a[i..i + 1]) 'Print b Next t = MilliSecs() - t Print "duration C: " + t EndIf End Ergebnis auf meinem Laptop, Core I7 Mobile ohne Debug: Zitat: creating string
string length: 53144100 checking string Method A2 duration A2: 6106.0000000000000 checking string Merthod B duration B: 5046.0000000000000 checking string Merthod C duration C: 5387.0000000000000 Schluss: Code: [AUSKLAPPEN] For Local i:Int = 0 Until a.Length
Local b:String = Chr(a[i]) 'Print b Next ist die schnelleste Möglichkeit, einzelne Zeichen zu überprüfen. |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
KirkZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nochma ich...
entweder bin ich blöd oder es liegt an der Uhrzeit (Urlaub macht mich immer Nacktaktiv ![]() ich hätte das ganze jetzt gerne andersherum also... das letzte Zeichen vom String in b speichern, auswerten und dann aus a Löschen... aber irgendwie bekomme ich immer nen fehler anscheinend ist das array dann zu lang... hier der Code Code: [AUSKLAPPEN] a$ ="1234567890" Repeat Print a$ b$= Chr( a[ a.length ] ) 'Das letzte Zeichen aus a$ in b$ speichern, (strings sind auch nur ein Array) a$= a[ 0..a.length-1 ] Print b$ 'mit b$ irgendwas anstellen und dann das nächste Zeichen holen Delay (1000) If KeyHit(key_escape) Then End Until a$="" End schon irgendwie krank... LevelEditor, TileMap kollision usw hab ich geschafft und dann scheiter ich an der Auswertung von Strings ![]() und noch immer ist die folgende Frage offen DaysShadow hat Folgendes geschrieben: Zitat: Keine wirklich kürzere Variante, aber ohne die Nutzung des BRL.Retro Moduls, wobei die Zeilen doch auch kürzer sind Wink
sollte man das BRL.Retro modul besser meiden? |
||
- Zuletzt bearbeitet von KirkZero am Do, Jul 01, 2010 6:59, insgesamt einmal bearbeitet
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] a$ ="1234567890" Ist klar, dass du einen Fehler bekommst, da du, wenn du mit a.length auf das array zugreifst, immer eine Position hinter dem letzten Eintrag abfragst ![]() Wenn a.length = 5, dann array = 0 bis 4, also 5 Einträge, a.length - 1 = 4, klar soweit oder? Dementsprechend muss natürlich in der Kürzungszeile a.length - 2 stehen, damit du das letzte Zeichen rauslässt, Einträge 0 bis 3 halt, 4 fliegt raus. Und BRL.Retro ist halt nur wegen der Basic-Kompatibilität da und soviel ist von Basic bei BlitzMax nicht mehr übrig und es gibt ja BlitzMax-Möglichkeiten das ganze zu lösen. Nutzen kannst du es an sich natürlich immer noch, das macht keinen Ärger oder so. ![]() MfG DaysShadow |
||
Blessed is the mind too small for doubt |
- Zuletzt bearbeitet von DaysShadow am Do, Jul 01, 2010 7:07, insgesamt einmal bearbeitet
KirkZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmmm... wenn ich deinen Code jetzt aber ausführe (-1 und -2 hatte ich auch versucht wegen des Array Index Fehlers),
dann wird aber jedes zweite zeichen übersprungen... Ausgabe wäre da folgende: Executing:untitled2.debug.exe 1234567890 0 12345678 8 123456 6 1234 4 12 2 Process complete |
||
No Brain, No Pain |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, auch in die Kürzungszeile muss a.length - 1, hatte es nicht getestet, so gehts aber.
Rein von der Logik wäre für mich halt -2 das Richtige gewesen, funktioniert aber wohl nicht nach meiner Logik. ![]() |
||
Blessed is the mind too small for doubt |
KirkZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ohjeh...
Ja, dann klappt es... ist ein bissel verwirrend, aber wenn man drüber nachdenkt ist es logisch... Einfach nur beachten, das es in einem Array immer bei 0 losgeht, legth aber immer den wirklichen Wert liefert... Ich danke Dir! |
||
No Brain, No Pain |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group