在学习C ++和D时,我试图通过测试两种语言中的一些代码来比较易用性。
所以,在C ++中,我有类似的东西(没有显示完整的C ++代码,仅用于演示):
char src[] = "some10char";
char des[];
for (int i=0; i<1000; i++)
{
src[9] = '0' + i % (126 - '0');
des = src;
}
在&#39;伪&#39;上面,for循环体中的第一行不仅指定int
值,还试图避免不可打印的值。
我怎么能在D中做同样的事?
到目前为止,我已设法将int
投反对char
而且我不知道我是否已正确使用它:
char[] src = "some10char".dup;
char[] dst;
for (int i=0; i<1000; i++)
{
if (i<15)
src[src.length-1] = cast(char)(i+15);
else
src[src.length-1] = cast(char)(i);
dst = src.dup // testing also dst = src;
}
答案 0 :(得分:4)
更多惯用的D代码:
char[] source = "some10char".dup; // or cast(char[])"some10char";
char[] destination; // = new char[source.length];
foreach (i; 0 .. 1000)
{
source[$ - 1] = cast(char)('0' + i % (126 - '0'));
destination = source.dup; // dup will allocate every time
//destination[] = source[]; // copying, but destination must have same length as source
}
答案 1 :(得分:3)
您可以添加和减去D中的字符文字,就像在c ++示例中一样,例如:
import std.stdio;
char[] str;
void main(string[] args)
{
for(int i=0; i<1000; i++)
{
str ~= cast(char)( i % (0x7F - '0') + '0') ;
}
writeln(str);
}
仅打印0
上的ascii字符且小于0x7F
。该字符被隐式转换为int,然后i
(它本身给出int
)的最终操作被明确地转换为char
(因此modulo / mask由0xFF)。< / p>