2

我编写了以下脚本,该脚本为包含 26 个字母的所有可能字符串创建了一个长度为 3 或 4 个单位的字符串。我想添加第 27 个字符。调用它?,但不管是哪一个。我想不出我应该怎么做。任何帮助都会受到欢迎。

这是执行 26 个字母的代码:

 #!/usr/bin/perl

 use 5.10.0;

 my $str = 'AAA';
 while ( $str ne 'ZZZZ' ) {
    say $str;
    $str++;
  }

如何将数字转换为以 27 为底的数字?

4

3 回答 3

3

perldoc perlop :

自增运算符有一点额外的内置魔法。如果你增加一个数值变量,或者曾经在数值上下文中使用过的变量,你会得到一个正常的增量。但是,如果该变量自设置以来仅用于字符串上下文,并且其值不是空字符串且与模式匹配/^[a-zA-Z]*[0-9]*\z/,则增量作为字符串完成,将每个字符保留在其范围内,并带有进位…

算法::组合学来拯救!

#!/usr/bin/env perl

use strict;
use warnings;
use feature 'say';

use Algorithm::Combinatorics qw(variations_with_repetition);

my $digits = ['A' .. 'Z', '?'];

print_sequence($digits, 3);

sub print_sequence {
    my ($digits, $n) = @_;

    my $it = variations_with_repetition($digits, $n);
    while (my $v = $it->next) {
        say join '', @$v;
    }

    return;
}
于 2013-02-21T18:03:21.667 回答
1

作为替代解决方案,您可以使用一些 for 循环并迭代 ASCII 值。它不是最好看的脚本,但它会为您生成值。您可以轻松修改它以打印您想要的任何额外字符。

#!/usr/bin/perl

use strict; 
use warnings;
use 5.10.0;

my $str = 65;

my ($i, $j, $k, $l);
for ($i = $str; $i < 92; $i++) {
    for ($j = $str; $j < 92; $j++) {
        for ($k = $str; $k < 92; $k++) {
            say chr($i), chr($j), chr($k);
            for ($l = $str; $l < 92; $l++) {
                say chr($i), chr($j), chr($k), chr($l);
            }
        }
    }
}

这是一个 ASCII 表参考:http ://www.asciitable.com/

于 2013-02-21T18:13:21.133 回答
0

Perl 中的字符串增量是“神奇的”。不幸的是,这意味着您不能(轻松)扩展它迭代的字母表。

如果你改写你的问题,这个问题很容易解决:

如何将数字转换为基数 27?

有“外面”的代码可以做到这一点。你的数字是字符“a”-“z”和“?”。然后你增加一个计数器,并将每个值转换为不同的基数/你的字符串。

于 2013-02-21T18:03:11.190 回答