Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Arrays 如何在perl中去掉数组中的空字符串?_Arrays_Perl - Fatal编程技术网

Arrays 如何在perl中去掉数组中的空字符串?

Arrays 如何在perl中去掉数组中的空字符串?,arrays,perl,Arrays,Perl,我有一个由许多零和“1”组成的字符串,但我只想从字符串中得到零的值。 因此,我使用split函数来分割'1',但它似乎会在数组中生成undef或空字符串。 所以,我尝试使用foreach扫描每个数组元素,并比较是否有我认为是“unde”的空字符串将被忽略。作为回报,非空字符串中的那些将不会被忽略,并将被放入另一个变量中。问题似乎是它无法识别我的“unde”变量 或 还有另一种更好的方法来扫描字符串,以便提取字符串中的“0”数吗 在这件事上请帮忙。 这就是编码: #!/usr/bin/perl

我有一个由许多零和“1”组成的字符串,但我只想从字符串中得到零的值。 因此,我使用split函数来分割'1',但它似乎会在数组中生成undef或空字符串。 所以,我尝试使用foreach扫描每个数组元素,并比较是否有我认为是“unde”的空字符串将被忽略。作为回报,非空字符串中的那些将不会被忽略,并将被放入另一个变量中。问题似乎是它无法识别我的“unde”变量

或 还有另一种更好的方法来扫描字符串,以便提取字符串中的“0”数吗

在这件事上请帮忙。 这就是编码:

#!/usr/bin/perl

  use strict;
 use warnings;

  my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111
';

  my @values = split('1', $data);
  my $zero = "0";
foreach my $val (@values)
{
    if (!defined$val)
    {
      $zero= $val;
     }

}
  print "$zero\n";

  exit 0;
非常感谢

问候,, 尼基

使用匹配操作,可以将所有0提取到一个数组中,数组的长度将给出0的计数

使用匹配操作,可以将所有0提取到一个数组中,数组的长度将给出0的计数。

尝试使用。它将所有出现的0转换为空字符串,并返回所做更改的数量。这是你的零数

my $data = '111100';
my $count = $temp =~ tr/0//;
print $count;

查看不同方法的基准测试。

尝试使用。它将所有出现的0转换为空字符串,并返回所做更改的数量。这是你的零数

my $data = '111100';
my $count = $temp =~ tr/0//;
print $count;


查看不同方法的基准。

不确定您需要什么,但正则表达式可能很有用:

#!/usr/bin/perl
use strict;
use warnings;

my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111';

# If you want an array of zeros

my @zeros = $data =~ /0/g;
print "@zeros\n";

# If you want the zeros together

my @multizeros = $data =~ /0+/g;
print "@multizeros\n";
给出:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000000000000000

不确定您需要什么,但正则表达式可能很有用:

#!/usr/bin/perl
use strict;
use warnings;

my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111';

# If you want an array of zeros

my @zeros = $data =~ /0/g;
print "@zeros\n";

# If you want the zeros together

my @multizeros = $data =~ /0+/g;
print "@multizeros\n";
给出:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000000000000000

尽管正则表达式匹配可能是实现这一点的最有效方法,正如Guru和cdarke所建议的,您可以通过在
1
s组上进行拆分,而不是在单个
1
s组上进行拆分:

$d = 101111001;
say scalar split /1+/, $d;    # prints 3

尽管正则表达式匹配可能是实现这一点的最有效方法,正如Guru和cdarke所建议的,您可以通过在
1
s组上进行拆分,而不是在单个
1
s组上进行拆分:

$d = 101111001;
say scalar split /1+/, $d;    # prints 3

您还可以使用来缩短它:
my$count=()=$data=~m/0/g谢谢分享。。这确实解决了问题。很高兴您能提供帮助:DYou还可以使用来缩短它:
my$count=()=$data=~m/0/g谢谢分享。。这确实解决了问题。很高兴您能提供帮助:DYou可以使用
tr/0/0/
来避免修改原始字符串:
perl-E'$d=10101;比如说$d=~tr/0/0/;比如说d美元输出:
2
10101
它不修改字符串。将采样线与
tr/0/
一起使用。您需要
tr/0//d
来告诉它删除零。(零?@JimDavis你说得对,谢谢。我编辑了我的答案。表示零和零都是正确的。我的柯林斯也这么说,没有AE/在这里,只是两者都有@user1799941什么类型的错误?请发布错误消息。您可以使用
tr/0/0/
避免修改原始字符串:
perl-E'$d=10101;比如说$d=~tr/0/0/;比如说d美元输出:
2
10101
它不修改字符串。将采样线与
tr/0/
一起使用。您需要
tr/0//d
来告诉它删除零。(零?@JimDavis你说得对,谢谢。我编辑了我的答案。表示零和零都是正确的。我的柯林斯也这么说,没有AE/在这里,只是两者都有@user1799941什么类型的错误?请发布错误消息。