我试图以正确的方式思考解决这个问题: - 我会将说明,n个元素数组作为参数传递给子程序.并且为每个元素匹配两个char类型S和T并为每个元素打印,这些字母的计数.到目前为止,我做了这个,但我被锁定,并在我的代码中发现了一些无限循环.
用严格; 使用警告;
sub main {
my @array = @_;
while (@array) {
my $s = ($_ = tr/S//);
my $t = ($_ = tr/T//);
print "ST are in total $s + $t\n";
}
}
my @bunchOfdata = ("QQQRRRRSCCTTTS", "ZZZSTTKQSST", "ZBQLDKSSSS");
main(@bunchOfdata);
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
Element 1 Counts of ST = 5
Element 2 Counts of ST = 6
Element 3 Counts of ST = 4
Run Code Online (Sandbox Code Playgroud)
任何线索如何解决这个问题?
关于你的问题的一些评论.Perl程序几乎没有定义main()为子程序.这是一种Python方法.
while (@array)将是一个无限循环,因为@array永远不会变小.您无法以$_这种方式读入默认变量.为了使其工作,使用for (@array)它将一次读取一个数组项$_,直到所有数据项都被读取.
该tr转换操作符是你的任务的工具.
获得结果所需的代码可能是:
#!/usr/bin/perl
use strict;
use warnings;
my @data = ("QQQRRRRSCCTTTS", "ZZZSTTKQSST", "ZBQLDKSSSS");
my $i = 1;
for (@data) {
my $count = tr/ST//;
print "Element $i Counts of ST = $count\n";
$i++;
}
Run Code Online (Sandbox Code Playgroud)
另外,请注意,my $count = tr/ST//;不需要音译操作符的绑定$_.Perl在$_保存这里要计算的值时假设这个.您尝试过的代码my $s = ($_ = tr/S//);会给出结果,但我所展示的更短的方式是首选方式.
(只注意到你了=,而不是=~在你的说法,那是错误的.必须是$s = ($_ =~ tr/S//);)
您可以在我的代码中组合2个搜索到的字母.没有必要单独进行.
我得到了你想要的输出.
Element 1 Counts of ST = 5
Element 2 Counts of ST = 6
Element 3 Counts of ST = 4
Run Code Online (Sandbox Code Playgroud)
此外,您不能像引用的那样在带引号的字符串中执行数学运算.
print "ST are in total $s + $t\n";
相反,你需要做:
print "ST are in total ", $s + $t, "\n";
操作在字符串之外执行的位置.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |