Selectively replace multiple instances of a character within a string: Difference between revisions

Content added Content deleted
(add RPL)
(Created Nim solution.)
Line 663: Line 663:
(AErBcadCbFD)
(AErBcadCbFD)
</syntaxhighlight>
</syntaxhighlight>

=={{header|Nim}}==
<syntaxhighlight lang="Nim">import std/tables

type
# Table of replacements for a character.
Replacements = Table[int, char]
# Table mapping characters to their replacement table.
ReplacementTable = Table[char, Replacements]

const ReplTable = {'a': {1: 'A', 2: 'B', 4: 'C', 5: 'D'}.toTable,
'b': {1: 'E'}.toTable,
'r': {2: 'F'}.toTable
}.toTable

proc replace(text: string; replTable: ReplacementTable): string =
var counts: Table[char, int] # Follow count of characters.
for c in text:
if c in replTable:
counts.mgetOrPut(c, 0).inc # Update count for this char.
let pos = counts[c]
result.add replTable[c].getOrDefault(pos, c)
else:
result.add c

echo replace("abracadabra", ReplTable)
</syntaxhighlight>

{{out}}
<pre>AErBcadCbFD
</pre>


=={{header|Perl}}==
=={{header|Perl}}==