Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中,如何测试字符串是否为回文?_Perl - Fatal编程技术网

在Perl中,如何测试字符串是否为回文?

在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

我试图编写一个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=<>); 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);
 }