Thread String, character, suche und ersetzen (26 answers)
Opened by Graf Herschel at 2018-12-11 10:42

Linuxer
 2018-12-13 09:48
#189393 #189393
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Dein gezeigter Ansatz erfüllt aber nicht die Aufgabe:

Quote
Diesen string möchte ich von hinten beginnend durchsuchen und nur den ersten Character, wenn 'C'|'B'|'f', durch 'K' ersetzen.


Man müsste also mit der For-Schleife von hinten beginnen bis zur gewünschten Position (in Deinem Beispiel die 3). Und es soll nur das erste gefundene Zeichen ersetzt werden, nicht alle.

Ich habe Deinen Ansatz dementsprechend angepasst und in meinen Benchmark eingebaut.

Es zeigt sich nicht sehr performant...

Code: (dl )
1
2
3
4
5
String length: 2400
Rate unpack_pack rindex_substr reverse_regex
unpack_pack 2327/s -- -98% -99%
rindex_substr 146161/s 6182% -- -13%
reverse_regex 168659/s 7149% 15% --

Code: (dl )
1
2
3
4
5
String length: 24000
Rate unpack_pack reverse_regex rindex_substr
unpack_pack 241/s -- -99% -100%
reverse_regex 19140/s 7838% -- -80%
rindex_substr 93699/s 38760% 390% --


Ich vermute, dass die unpack()/pack() Operationen da die Zeit verbrauchen...

Ich hatte dann noch eine Idee mit split(), tr/// und join(), aber die Variante ist noch langsamer als Deine unpack() Variante:

Code: (dl )
1
2
3
4
5
6
String length: 2400
Rate split_tr_join unpack_pack rindex_substr reverse_regex
split_tr_join 880/s -- -62% -99% -99%
unpack_pack 2337/s 166% -- -98% -99%
rindex_substr 146161/s 16513% 6155% -- -11%
reverse_regex 163840/s 18522% 6912% 12% --
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread String, character, suche und ersetzen