将字符串乘以整数会返回整数吗?

时间:2014-04-22 04:25:12

标签: string d

所以我试图用D制作一个星号金字塔。 首先,我注意到串联似乎是不可能的。写出writeln("foo" + "bar")之类的内容会给你一个语法错误。所以相反,我尝试将字符串放在python中,但是没有使用双引号字符串,但是使用单引号字符串会发生奇怪的事情。

如果您输入此

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

它会返回一堆整数。 谁能解释为什么会这样? 让我知道如何连接字符串也将非常有用。

谢谢!

2 个答案:

答案 0 :(得分: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上的一个语句中。

答案 1 :(得分:1)

首先想到的解决方案:

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

两个替代方案是std.array.replicate和std.range.repeat:

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);
}