簡體   English   中英

Perl模塊將數字轉換為字母表示法

[英]Perl Module to convert numbers to letter notation

是否有perl模塊將數字轉換為字母,反之亦然?

例如

1 = A 
2 = B
3 = C
...
27 = AA
28 = AB
29 = AC
...
53 = BA
54 = BB
55 = BC

等等等等。

此代碼顯示了一個功能a2na2n您的需要

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

好吧,Perl可以處理范圍內的字母,這可能符合您的需求:

my @letters = 'A' .. 'BC'; # A B C ... Z AA AB AC etc.

然后你可以簡單地做:

my $letter = $letter[$foo - 1];   # 1 -> A, 2 -> B ...

沒有與一個可愛的把戲..操作。 嘗試:

print join ",",("A".."ZZ"),"\n"

要么

my @a = ("A".."ZZ");
print $a[56],"\n";

但是,如果你要進入成千上萬的元素中,這並不是一個好方法。 然后你最好自己做基數為26的數學(非常簡單的數學運算)。

你真的需要一個模塊嗎?

my $n = 55;
my $s = 'A';
$s++ while --$n;
print "$s\n";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM