3
我試圖將字母轉換爲其在字母表中的相應數字。我有一個我認爲應該工作的散列,我只是不知道如何將它應用到我的字符串。將我的散列應用於字符串以從字母中獲取數字
字符串:
my $string = "abc";
和我的哈希:
@hash{("a".."z")} = (1..26);
如何讓我的字符串是在這種情況下,123?
我試圖將字母轉換爲其在字母表中的相應數字。我有一個我認爲應該工作的散列,我只是不知道如何將它應用到我的字符串。將我的散列應用於字符串以從字母中獲取數字
字符串:
my $string = "abc";
和我的哈希:
@hash{("a".."z")} = (1..26);
如何讓我的字符串是在這種情況下,123?
use warnings;
use strict;
my $string = "abc";
my %hash;
@hash{("a".."z")} = (1..26);
$string =~ s/(.)/$hash{$1}/g;
print "$string\n";
__END__
123
更新:另一種方式,沒有一個哈希值,是使用ord
my $string = "abc";
$string =~ s/(.)/ord($1) - 96/ge;
print "$string\n";
通用的解決方案:
my %lookup; @lookup{"a".."z"} = 1..26;
my $pat = '(?:'.(join '|', map quotemeta, keys %lookup).')';
s/($pat)/$lookup{$1}/g;
假設鍵包括至多一個字符:
my %lookup; @lookup{"a".."z"} = 1..26;
my $class = '['.(join '', map quotemeta, keys %lookup).']';
s/($class)/$lookup{$1}/g;
「硬編碼」:
$string =~ s/([a-z])/ ord($1) - ord('a') + 1 /ge;
是一個比其他更好嗎? – BluGeni
這取決於你的「更好」的定義:)你更喜歡哪一個? ord解決方案的代碼較少,但是更易於理解和維護? – toolic
注意:既不處理a..z之外的字符。那是問題嗎? – ikegami