Split a character string based on change of character: Difference between revisions
Split a character string based on change of character (view source)
Revision as of 15:51, 9 February 2024
, 3 months ago→{{header|Wren}}: Changed to Wren S/H
(→BQN: also handle repeating blocks) |
m (→{{header|Wren}}: Changed to Wren S/H) |
||
(10 intermediate revisions by 3 users not shown) | |||
Line 283:
=={{header|ALGOL 68}}==
<syntaxhighlight lang="algol68">BEGIN
# returns s with ", " added between each change of character #
Line 295 ⟶ 294:
[ 3 * ( ( UPB s - LWB s ) + 1 ) ]CHAR result;
INT r pos := LWB result;
CHAR s char := s[ LWB s ];
FOR s pos FROM LWB s TO UPB s DO
Line 317 ⟶ 315:
<pre>
g, HHH, 5, YY, ++, ///, \
</pre>
=={{header|Amazing Hopper}}==
VERSION 1: string
#include <basico.h>
#define INICIO 1
#define CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"+-/ \\:,;:_*"
algoritmo
objetivo = "gHHH5YY\"\"++ ///,,,\\", indice=0
largo=0, sublargo=0, v=0
#( largo = len(indice:=(onechar(CHARS,objetivo))) )
t=0, nuevo=""
para cada caracter ( v, indice, largo )
#(t = replicate(v, sublargo := ((poschar(INICIO, v, objetivo) - 1 ) ) ))
#(nuevo = cat( cat(nuevo, t), ", "))
objetivo+=sublargo
siguiente
nuevo -= 2
imprimir( "NEW STRING=\n", nuevo,NL)
terminar
</syntaxhighlight>
{{out}}
<pre>
$ hopper3 basica/splitrep.bas
NEW STRING=
g, HHH, 5, YY, "", ++, , ///, ,,,, \
</pre>
VERSION 2: arrays
<syntaxhighlight lang="c">
#include <basico.h>
#define INICIO 1
#define CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\"+-/ \\:,;:_*"
algoritmo
objetivo = "gHHH5YY\"\"++ ///,,,,\\", indice=0
largo=0, sublargo=0, lista={}, v=0
#( largo = len(indice:=(onechar(CHARS,objetivo))) )
para cada caracter ( v, indice, largo )
#( replicate(v, sublargo := ((poschar(INICIO, v, objetivo) - 1 ))))
meter en( lista )
objetivo+=sublargo
siguiente
imprimir( "LISTA=\n", lista, NL )
terminar
</syntaxhighlight>
{{out}}
<pre>
$ hopper3 basica/splitrep2.bas
LISTA=
g,HHH,5,YY,"",++, ,///,,,,,,\
</pre>
Line 1,710 ⟶ 1,775:
<pre>string: gHHH5YY++///\
separated: g, HHH, 5, YY, ++, ///, \</pre>
=={{header|K}}==
<syntaxhighlight lang="k">split: {(&~=':x)_x}
","/ split "gHHH5YY++///\\"</syntaxhighlight>
{{out}}
<pre>"g,HHH,5,YY,++,///,\\"</pre>
=={{header|Kotlin}}==
<syntaxhighlight lang="kotlin">// version 1.0.6
▲<syntaxhighlight lang="scala">// version 1.0.6
fun splitOnChange(s: String): String {
Line 1,728 ⟶ 1,799:
println(splitOnChange(s))
}</syntaxhighlight>
{{out}}
<pre>
Line 1,735 ⟶ 1,805:
=== Using fold() ===
<syntaxhighlight lang="kotlin">
Line 1,747 ⟶ 1,816:
}
</syntaxhighlight>
{{out}}
<pre>
Line 2,823 ⟶ 2,891:
=={{header|Wren}}==
<syntaxhighlight lang="
if (s.count == 0) return ""
var res = []
|