,如果我有兩個不同的字符串,如:的perl怎麼做線對齊在Perl
my $a = "garfieldaagt";
my $b = "field";
,我需要調整它們像
garfieldaagt
field
對它們進行比較,我怎麼能做到這一點?
任何想法?由於
,如果我有兩個不同的字符串,如:的perl怎麼做線對齊在Perl
my $a = "garfieldaagt";
my $b = "field";
,我需要調整它們像
garfieldaagt
field
對它們進行比較,我怎麼能做到這一點?
任何想法?由於
如果您想直觀比較,請參閱其他答案。如果您想以編程方式進行比較,可以選擇幾個選項。
最後,如果你想墊字符串與空格的長度相同,則可以使用與printf
相同的方式使用sprintf
。
第二個選項是確實是一個程序員可以在生產代碼中寫:
my $x = "foobar";
my $y = "bar";
if ($y eq substr $x, -length($y))
{
print "$y is a suffix of $x\n";
}
正則表達式或一個完整的子字符串搜索是矯枉過正這裏。
我喜歡你的第二個選項,你可以舉一個例子 – user1051414
我加了個例子。我希望這不是你的家庭作業,因爲在這裏不提供對作業的完整答案。 – nponeccop
哦,我提供了你最初的加菲爾德vs場的問題的答案。在garfieldjdkfdjf vs garfield的更一般的設置中,你應該使用'index'函數。 – nponeccop
您可以使用index函數來搜索字符串,然後使用x
repetition operator將您的子字符串與它在更長字符串中找到的位置對齊。
$a = "garfield";
$b = "field";
print $a,"\n";
print " " x index($a,$b) ,$b,"\n";
這看起來像一個X-Y問題。我認爲這個問題更多的是確定字符串B是否包含字符串A.
雖然substr
/index
組合是很有誘惑力的使用,正則表達式更好地適合這個需求裏面:
my $stringA = 'garfieldaagt';
my $stringB = 'field';
print "'$stringB' contained in '$stringA'\n" if $stringA =~ /$stringB/;
# 'field' contained in 'garfieldaagt'
使用正則表達式還將解決更復雜的需求,如不區分大小寫的匹配。
查看perldoc perlrequick
快速介紹。
動態規劃是做到這一點,你會得到:
加菲貓
Garied
到
加菲貓
明嘉-IE-d
這是一個路線。任何其他的東西都可以是前綴搜索,子串搜索或者你擁有的東西。
它完成比較Garfield x Garied以矩陣的形式並找到從第一個字母匹配到最後一個的最長和更便宜的路徑,懲罰差距。
如果你不太常見的字母分數較高,對齊可能會更好。但在自然語言(英語,西班牙語)的情況下不是必需的。
Regards
不明白這是如何回答這個問題的? – kleopatra
如果家庭作業增加'家庭作業'標記。 – nponeccop
是你的問題如何正確對齊文本或如何對齊匹配的兩個單詞的特定部分?例如。如果它是'加菲爾德'vs'場',而不是。 – TLP
如果'$ b'不是'$ a'的子字符串,你希望看到什麼?即如果'$ b =「lkjfb」'。 – n0rd