【问题标题】:multiplying a string by an integer returns integers?将字符串乘以整数返回整数?
【发布时间】:2014-04-22 04:25:12
【问题描述】:

所以我尝试使用 D 制作星号金字塔。 首先,我注意到串联似乎是不可能的。写出像writeln("foo" + "bar") 这样的东西会给你一个语法错误。因此,我尝试像在 python 中那样将字符串相乘,这不适用于双引号字符串,但使用单引号字符串会发生一些奇怪的事情。

如果你输入这个

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

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

谢谢!

【问题讨论】:

标签: string d


【解决方案1】:

'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。

【讨论】:

  • 非常感谢!您认为您也可以在连接方面帮助我吗?
【解决方案2】:

想到的第一个解决方案:

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

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 2012-09-16
    • 2015-12-28
    • 2017-01-03
    • 2013-03-10
    • 2016-04-30
    • 2015-10-08
    • 2021-04-26
    相关资源
    最近更新 更多