On Thursday, 22 September 2022 at 10:53:32 UTC, Salih Dincer wrote:
Is there a more accurate way to delete the '\0' characters at the end of the string?

Accurate? No. Your code works. Correct is correct, no matter efficiency or style.

I tried functions in this module: https://dlang.org/phobos/std_string.html

[code]

You won’t do it any shorter than this if returning a range of `dchar` is fine:
```d
auto removez(const(char)[] string, char ch = '\0')
{
    import std.algorithm.iteration;
    return string.splitter(ch).joiner;
}
```
If `dchar` is a problem and a range is not what you want,
```d
inout(char)[] removez(inout(char)[] chars) @safe pure nothrow
{
    import std.array, std.algorithm.iteration;
    auto data = cast(const(ubyte)[])chars;
    auto result = data.splitter(0).joiner.array;
    return (() inout @trusted => cast(inout(char)[])result)();
}
```
Bonus: Works with any kind of array of qualified char. As `string` is simply `immutable(char)[]`, `removez` returns a `string` given a `string`, but returns a `char[]` given a `char[]`, etc.

Warning: I do not know if the `@trusted` expression is really okay. The cast is not `@safe` because of type qualifiers: If `inout` becomes nothing (i.e. mutable), the cast removes `const`. I suspect that it is still okay because the result of `array` is unique. Maybe others know better?

Reply via email to