2014-04-22 50 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); 
}