2014-04-22 3 views
4

그래서 나는 D를 사용하여 별표 피라미드를 만들려고 애썼다. 우선 연결이 불가능한 것 같았다. writeln("foo" + "bar")과 같은 것을 쓰면 구문 오류가 발생합니다. 그래서 대신 파이썬에서 문자열을 곱하려고 시도했습니다. 이중 따옴표 붙은 문자열에서는 작동하지 않지만, 작은 따옴표로 묶인 문자열에서는 이상한 일이 발생합니다. 이문자열에 정수를 곱하면 정수가 반환됩니까?

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의 연결 연산자는 ~ isntead +입니다. 그래서'writeln ("foo"~ "bar");' –

답변

5

'0'은 문자열이 아니며 ASCII 인코딩을 사용하는 문자입니다. 숫자에 인코딩의 정수 ID가 곱 해지고 있습니다. 예를 들어, 아스키의 'A'에 대한 인코딩은 문자가 두 경우 모두 정수로 변환되고 있기 때문에이 프로그램은 65과 650를 인쇄 할 65

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

입니다.

원래의 연결 문제를 해결하려면 두 개의 배열을 연결하는 데 '~'연산자를 사용하거나 "array1 ~ = array2"를 사용하여 하나의 명령문에서 array1을 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); 
} 
관련 문제