我有一个作业要求我输入一个数字和字符序列,每个数字和字符用空格分隔,然后通过输入" q"结束序列。或" Q"然后是一个空间。除了数字之外的所有东西都应该被丢弃,我们要找到总和。因此,例如,如果输入是" 1 12 a 2 5 P Q"然后我们应该期望得到" 20"作为输出。
到目前为止,我正在使用
$input = <>;
$input =~ tr/0-9//cd;
只获取数字,但我想要的是将它们分开并得到总和。现在输出将是11225,我想要&#34; 1 + 12 + 2 + 5&#34;得到总和。
答案 0 :(得分:1)
perl -ne '$s=0;($line)=/(.*?)[Qq]/;while($line=~/(\d+)/g) {$s+=$1} print "$s\n"'
<强>解释强>
以Q或q开始剥离每一行的尾部,然后扫描剩余部分以查找孤立的正整数并将它们加在一起。
答案 1 :(得分:0)
首先,删除所有不是数字或空格的字符:
$input =~ s/[^0-9\s]//g;
然后,拆分空白:
@digits = split(/\s/, $input);
然后你有一个可以加起来的数字列表。
答案 2 :(得分:0)
在第一步中保留空格:
$input =~ tr/0-9 //cd;
然后拆分空格:
my @numbers = split ' ', $input;
(这是一种特殊形式的分割,其作用类似于split /\s+/
,但也会丢弃空的前导字段。)
你可能想在Q之后摆脱一切:
$input =~ s/Q .*//i;
为了它的价值,我不会跳到这里使用tr;我已经开始拆分空格,然后处理只有数字的字段,直到达到Q.