2014-04-22 48 views
4

所以我试图做一个使用D的星号金字塔。 首先我注意到,连接似乎是不可能的。写出类似writeln("foo" + "bar")会给你一个语法错误。所以相反,我试图乘以Python中的字符串,这不适用于双引号字符串,但单引号字符串有些奇怪的事情发生。乘以一个整数字符串返回整数?

如果您在本

import std.stdio; 
void main() 
{ 
    foreach (i; 0 .. 10) 
    { 
     writeln(i*'0'); 
    } 
} 

键入它会返回一串整数。 任何人都可以解释为什么会发生这种情况? 让我知道如何连接字符串也会很有帮助。

的感谢!

+0

'+'不应该被用来作为级联运营商。永远。 **任何**语言。 http://gwydir.demon.co.uk/jo/javascript/numbers.htm#types – BCS

+0

D中的连接运算符不是+。所以试试'writeln(“foo”〜“bar”);' –

回答

5

'0'不是一个字符串,它是一个字符,它使用ASCII编码。该数字正在与编码的整数ID相乘。例如,对于ASCII的“A”的编码是65。

import std.stdio; 
int main() 
{ 
     writeln(cast(int)'A'); 
     writeln(10 * 'A'); 
     return 0; 
} 

此程序将打印65和650,因为该字符被转换到在这两种情况下的整数。

要解决原始连接问题,您可以使用'〜'运算符连接两个数组,或者使用“array1〜= array2”将array2追加到array1中的语句中。

char[5] arr3 = 's'; 
writeln(arr3); 

两个备选方案std.array.replicate和std.range.repeat:

想到的
+0

非常感谢! 你认为你可以帮我拼接吗? – Skiddzie

+1

当然,我只是更新了答案。 – h4tch

1

首先解决

import std.array; 
import std.stdio; 

void main() { 
    auto arr = replicate(['s'], 5); // lazy version: http://dlang.org/phobos/std_range.html#repeat 
    // or 
    auto arr2 = ['s'].replicate(5); 
    writeln(arr); 
    writeln(arr2); 
}