[英]In Perl, how can I test if a string is a palindrome?
我正在尝试编写一个 Perl 程序来确定 7 个字符的用户输入是否为回文。
不使用任何数组、字符串或反向函数。
所需的 output:
Enter in a 7 character item: 1111111
PALINDROME!
要么
Enter in a 7 character item: 1234567
NOT A PALINDROME!
这是我到目前为止所拥有的:
print "Enter in a 7 character item: \n";
my ($a, $b, $c, $d, $e, $f, $g);
chomp ($a=<>); chomp ($b=<>); chomp ($c=<>); chomp ($d=<>);
chomp ($e=<>); chomp ($f=<>); chomp ($g=<>);
if ($a~~$g && $b~~$g && $c~~$e){
print "PALINDROME!\n";
}
else{
print "NOT A PALINDROME! \n";
}
不幸的是,这给了我这个结果:
Enter in a 7 character item:
1
1
1
1
1
1
1
PALINDROME!
如果有人有建议,将不胜感激。
我期待听到您的意见。 谢谢!
这对我来说是正确的,毕竟1111111
是一个回文!
但是,智能匹配运算符并不是一个非常有用的东西,并且您想在这里测试字符串相等性,因此请使用eq
而不是~~
。
更好的是我建议你允许用户输入整个字符串,所以
chomp(my $str = <>);
if ( $str eq reverse($str) ) {
print "PALINDROME!\n";
}
else {
print "NOT A PALINDROME! \n";
}
不使用reverse
:
#!/usr/bin/perl
use strict;
use warnings;
my ($word) = @ARGV;
my @chars = split //, $word;
my $palindrome = 1;
for (0..@chars/2-1) {
$palindrome = $chars[$_] eq $chars[-($_+1)]
or last;
}
print "$word ".($palindrome ? "is" : "isn't")." a palindrome\n";
用法:
script word
改变
$b~~$g 到 $b~~$f 也可能有帮助。
没有使用反向,但正则表达式(和递归)。
sub palyndromeP{
my $s=shift;
if (length($s)<2) {return 1}
if ($s !~ /^(.)(.*)\1$/) {return 0}
return palyndromeP($2);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.