在Perl中,如何测试字符串是否为回文?
我试图编写一个Perl程序来确定一个7个字符的用户输入是否是回文 不使用任何数组、字符串或反向函数 期望输出:在Perl中,如何测试字符串是否为回文?,perl,Perl,我试图编写一个Perl程序来确定一个7个字符的用户输入是否是回文 不使用任何数组、字符串或反向函数 期望输出: Enter in a 7 character item: 1111111 PALINDROME! 或 这就是我到目前为止所做的: print "Enter in a 7 character item: \n"; my ($a, $b, $c, $d, $e, $f, $g); chomp ($a=<>); chomp ($b=<>); chom
Enter in a 7 character item: 1111111
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";
}
如果有人提出建议,我们将不胜感激
我期待着听取你的意见。谢谢大家! 我觉得这是对的,毕竟
1111111
是回文
但是,智能匹配运算符不是一个非常有用的东西,您希望在这里测试字符串的相等性,因此请使用eq
而不是~
更好的是,我建议您允许用户输入整个字符串,因此
chomp(my $str = <>);
if ( $str eq reverse($str) ) {
print "PALINDROME!\n";
}
else {
print "NOT A PALINDROME! \n";
}
chomp(我的$str=);
如果($str eq反向($str)){
打印“回文!\n”;
}
否则{
打印“不是回文!\n”;
}
正在更改
$b~~~$g到$b~~~$f也可能有帮助。不使用
反向
:
#!/usr/bin/perl
use strict;
use warnings;
my ($word) = @_;
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
没有使用反向,但使用正则表达式(和递归)
亚孢粉层{
我的$s=班次;
如果(长度($s)没有反向-可能是可行的。没有数组-好吧,也许一些真正的黑色正则表达式魔术可以帮助。但是,没有字符串?我们还在谈论Perl吗?顺便说一下,从标题我想你希望代码本身是回文的…那将是一个地狱般的挑战!回文回文检查器(代码游戏):@SinanÜnür,实际上,它一直在做一个比必要的更多的比较。修正。
#!/usr/bin/perl
use strict;
use warnings;
my ($word) = @_;
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
sub palyndromeP{
my $s=shift;
if (length($s)<2) {return 1}
if ($s !~ /^(.)(.*)\1$/) {return 0}
return palyndromeP($2);
}