如何使用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;
}