【问题标题】:How to count odd numbers in a row of numbers in perl? [closed]如何在perl中计算一行数字中的奇数? [关闭]
【发布时间】:2020-08-19 00:11:29
【问题描述】:

我有这样的数字:

15-84-315-164 
11-76-132-310
44-20-958-2732

而且我需要知道一排有多少个奇数。

例如在15-84-315-164中有6个奇数。

我想使用 perl 和正则表达式作为解决方案。

use strict;
use warnings;
use feature 'say';

my @data = <DATA>;
chomp @data;

process_line($_) for @data;

sub process_line {
    my $data = shift;

    my $count;
    my @digits = $data =~ /(\d)/g;

    for my $digit (@digits) {
        $digit%2 ? $count->{odd}++ : $count->{even}++;
    }

    say ' Odd: ' . $count->{odd} . ' Even: ' . $count->{even} . ' Line: ' . $data;
}


__DATA__
15-84-315-164 
11-76-132-310
44-20-958-2732

输出

 Odd: 6 Even: 4 Line: 15-84-315-164
 Odd: 7 Even: 3 Line: 11-76-132-310
 Odd: 4 Even: 7 Line: 44-20-958-2732

【问题讨论】:

  • 那么您提供的代码有什么问题?如果有效,你的问题是什么?如果没有,请提供预期和实际行为,并说明您尝试调试的方式以及失败的原因

标签: regex perl numbers int


【解决方案1】:
my $string = "15-84-315-164";
my ($number) = scalar( @{[ $string=~/(1|3|5|7|9)/gi ]} );
print $number

下面是正则表达式。

(1|3|5|7|9)

这基本上是查找奇数是否存在。

一旦我们有了正则表达式,我们就可以通过使用标量来计算正则表达式出现的次数。

【讨论】:

  • 更快更简单:my $num_odd_digits = $string =~ tr/13579//;
猜你喜欢
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2011-03-09
  • 2015-06-26
  • 2017-08-11
  • 1970-01-01
  • 2015-08-28
  • 2010-12-02
相关资源
最近更新 更多