A debug class has started
forkit
forkit at gmail.com
Tue Dec 14 08:45:57 UTC 2021
On Tuesday, 14 December 2021 at 08:07:43 UTC, WebFreak001 wrote:
>
> The best way would be not doing this at all - when you
> manipulate strings/arrays in D you can do so by just assigning
> the elements like this:
>
> ```d
> immutable(char)[] replaceChar(char[] str, char ch1, char ch2)
> {
> for (ulong i = 0; i < len; i++)
> {
> if (str[i] == ch1)
> {
> writefln("Found %c at str[%d]", ch1, i); // fine
> str[i] = ch2;
> }
> }
>
> return str.idup;
> }
> ```
>
> then when you call it:
> ```d
> replaceChar(str.dup, ';', 'X');
> ```
>
> or the function more idiomatically:
> ```d
> string replaceChar(scope char[] str, char ch1, char ch2)
> {
> // ref makes the `c` variable an l-value / assignable and
> modifies the character when assigned
> foreach (i, ref c; str)
> {
> if (c == ch1)
> {
> writefln("Found %s at str[%s]", c, i);
> c = ch2;
> }
> }
>
> return str.idup; // you could also not .idup and return
> char[] and let the caller .idup it when needed
> }
> ```
>
> You only really need to work with pointers when you interface
> with a C library that needs them.
This was of course just me 'playing around with pointer casting
in D', and not code that I would have deployed. Debugging that
code used up an hour of my life .. that I cannot get back
I might try out @safe instead ;-)
More information about the Digitalmars-d-learn
mailing list