是否存在将数字转换为字母的perl模块,反之亦然?
例如
1 = A
2 = B
3 = C
...
27 = AA
28 = AB
29 = AC
...
53 = BA
54 = BB
55 = BC
等等。
答案 0 :(得分:9)
此代码显示了一个功能a2n
,可以满足您的需求
use strict;
use warnings;
printf "%2s = %d\n", $_, a2n($_) for qw/ A B C AA AB AC BA BB BC /;
sub a2n {
my $n = 0;
$n = $n * 26 + $_ for map { ord($_) & 0x1F } split //, shift;
$n;
}
<强>输出强>
A = 1
B = 2
C = 3
AA = 27
AB = 28
AC = 29
BA = 53
BB = 54
BC = 55
相应的n2a
看起来像这样
sub n2a {
my ($n) = @_;
my @a;
while ($n > 0) {
unshift @a, ($n-1) % 26;
$n = int(($n-1)/26); #Edited for failing corner case
}
join '', map chr(ord('A') + $_), @a;
}
答案 1 :(得分:6)
好吧,Perl可以处理范围内的字母,这可能符合您的需求:
my @letters = 'A' .. 'BC'; # A B C ... Z AA AB AC etc.
然后你就可以做到:
my $letter = $letter[$foo - 1]; # 1 -> A, 2 -> B ...
答案 2 :(得分:3)
..
运算符有一个可爱的技巧。尝试:
print join ",",("A".."ZZ"),"\n"
或
my @a = ("A".."ZZ");
print $a[56],"\n";
如果你要进入成千上万的元素中,这并不是一个好方法。那么你自己最好为base-26做数学(非常简单的数学运算)。
答案 3 :(得分:-1)
你真的需要一个模块吗?
my $n = 55;
my $s = 'A';
$s++ while --$n;
print "$s\n";