On Tuesday, 26 August 2014 at 20:58:15 UTC, MacAsm wrote:
string str = "foobaa";
string prev;
[...]
prev = str; // <- I want to avoid this string duplication did
in every move() call
If you're worried that this copies the string data, it doesn't. A
dynamic array (which string is) is a pair of a pointer and a
length, and only those are copied.
foreach(i; 0 .. n) { // <- improve this is welcome too.
str.popFront();
}
You can use std.range.popFrontN: str.popFrontN(n);
Also, there are two (maybe more) subtle differences between the D
code and the C code, of which you may not be aware:
1) The D version assumes UTF8. A char is a UTF8 code unit in D,
whereas in C it's just a byte. In D that would be (u)byte. But
char is fine when you're indeed working on UTF8.
2) The D version decodes to code points (dchar). This means e.g.,
that the D version potentially reaches the end of the string in
fewer `go` calls than the C version.
Finally, the "learn" board [1] would have been a better place for
this post. No turning back now, and it's not a big deal, but
next time maybe post there.
[1] http://forum.dlang.org/group/digitalmars.D.learn