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查找字符串中的元音数 子解决方案{ 我的$n=$\0]; 我的$m=lc$u1]; my@chars=拆分(“,$m); 我的$result=0; my@元音=(“a”、“e”、“i”、“o”、“u”); #输出[根据需要取消注释和修改] for(my$i=0;$i_Perl - Fatal编程技术网

如何使用Perl查找字符串中的元音数 子解决方案{ 我的$n=$\0]; 我的$m=lc$u1]; my@chars=拆分(“,$m); 我的$result=0; my@元音=(“a”、“e”、“i”、“o”、“u”); #输出[根据需要取消注释和修改] for(my$i=0;$i

如何使用Perl查找字符串中的元音数 子解决方案{ 我的$n=$\0]; 我的$m=lc$u1]; my@chars=拆分(“,$m); 我的$result=0; my@元音=(“a”、“e”、“i”、“o”、“u”); #输出[根据需要取消注释和修改] for(my$i=0;$i,perl,Perl,=比较数字。eq比较字符串。因此,与$chars[$i]==$元音[$j]不同,您应该编写$chars[$i]eq$元音[$j]。如果您使用了建议使用的使用警告;,您会得到一个关于这方面的警告 顺便说一下,不需要使用额外的长度变量。您可以使用length()获取字符串的长度,也可以使用scalar()获取数组的长度。此外,可以使用$\a访问数组@a的最后一个索引。也可以使用foreach迭代数组的所有元素。让我建议一种更好的方法来计算文本中的字母数 sub Solution{ my $n

=
比较数字。
eq
比较字符串。因此,与
$chars[$i]==$元音[$j]
不同,您应该编写
$chars[$i]eq$元音[$j]
。如果您使用了建议使用的
使用警告;
,您会得到一个关于这方面的警告


顺便说一下,不需要使用额外的长度变量。您可以使用
length()
获取字符串的长度,也可以使用
scalar()获取数组的长度
。此外,可以使用
$\a
访问数组
@a
的最后一个索引。也可以使用
foreach
迭代数组的所有元素。

让我建议一种更好的方法来计算文本中的字母数

sub Solution{
    my $n=$_[0];
    my $m=lc $_[1];
    my @chars=split("",$m);

    my $result=0;

    my @vowels=("a","e","i","o","u");


    #OUTPUT [uncomment & modify if required]
    for(my $i=0;$i<$n;$i=$i+1){
        for(my $j=0;$j<5;$j=$j+1){
            if($chars[$i]==$vowels[$j]){
                $result=$result+1;
                last;
            }

        }

    }

    print $result;
}



#INPUT [uncomment & modify if required]
my $n=<STDIN>;chomp($n);
my $m=<STDIN>;chomp($m);


Solution($n,$m);

更好的解决方案是使用运算符,该运算符在标量上下文中返回替换的数量:

a: 7
e: 18
i: 12
o: 12
u: 5


我还包括了
y
,它有时是一个元音,请参见:

您的代码是稍微修改过的形式

perl -le 'for ( @ARGV ) { $_ = lc $_; $n = tr/aeiouy//; print "$_: $n"; }' Use Perl to count how many vowels are in each string
use: 2
perl: 1
to: 1
count: 2
how: 1
many: 2
vowels: 2
are: 2
in: 1
each: 2
string: 1
!/usr/bin/env perl
#
#vim:ai:ts=4:sw=4
#
严格使用;
使用警告;
使用特征“说”;
my$input=get_input('请输入句子:');
说“计数元音:”.solution($input);
子获取输入{
我的$prompt=shift;
我的$input;
说$prompt;
$input=;
chomp($输入);
返回$input;
}
子解{
我的$str=lc班次;
我的@chars=拆分(“”,$str);
我的$count=0;
我的@元音=qw/aeiou/;
地图{
my$c=$\uU4;
映射{$count++if$c eq${}@元音;
}@chars;
返回$count;
}

当您不使用结果时,没有很好的理由使用map来代替for。谢谢您的回答。因此,我还有另一个疑问。我的Perl脚本使用了非常标准的C/C++方法。您建议Perl使用这种方法吗?@NamanBansal:是的,您的代码看起来非常C-ish。这没有错,您也可以用Perl来做。但是Perl在关于字符串和数组,比普通的C语言好。那么为什么不使用它,让人们的生活更轻松呢?我从哪里学习Perl?我已经学习了语法,但这就像用Perl编写C语言一样。
perl -le 'for ( @ARGV ) { $_ = lc $_; $n = tr/aeiouy//; print "$_: $n"; }' Use Perl to count how many vowels are in each string
use: 2
perl: 1
to: 1
count: 2
how: 1
many: 2
vowels: 2
are: 2
in: 1
each: 2
string: 1
#!/usr/bin/env perl
#
# vim: ai:ts=4:sw=4
#

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

my $input = get_input('Please enter sentence:');

say "Counted vowels: " . solution($input);

sub get_input {
    my $prompt = shift;
    my $input;

    say $prompt;

    $input = <STDIN>;

    chomp($input);

    return $input;
}

sub solution{
    my $str = lc shift;

    my @chars=split('',$str);

    my $count=0;
    my @vowels=qw/a e i o u/;

    map{
        my $c=$_;
        map{ $count++ if $c eq $_} @vowels;
    } @chars;

    return $count;
}