作者CindyLinz (Cindy Wang)
看板Perl
标题Re: [问题] 如何取出字串中的数字并加以运算
时间Sun Jan 29 18:41:57 2012
※ 引述《abliou (把青春freeze)》之铭言:
: ※ 引述《saka12 (saka)》之铭言:
: : 大家好,我式perl的新手
: : 请问如果从<STDIN>输入任意数字或字母,
: : 在不使用"阵列"跟"正规表示法"的前提下,
: : 怎麽只取数字,并运行基本的运算
: : 例如:
: : 使用者输入: 1 12 3 a 24 e 5
: : 萤幕显示: 1+12+3+24+5=45
: : 我本来用substr来取单一字元,可是这样12会被拆成1跟2,
: : 我卡这里很久了,实在想不出来,所以请大家帮帮忙
: : 谢谢D
: $in=<stdin> ;
: chomp($in);
: sub{ print join("+",@_ )."=". ${[map{$sum+=$_}@_]}[-1] }
: ->(grep{/\d+/}split/\s/,$in);
一个以字串处理为主的解法:
$expr =
<STDIN>;
chomp $expr;
$expr =~
s/(?<=\d)\D+(?=\d)/+/g;
$ans =
eval $expr;
print "$expr=$ans\n";
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.242.246.249
1F:推 imce:用=~应该算用到"正规表示法"了吧 01/29 18:56
2F:推 abliou:这方法挺厉害的!! 01/29 21:46
3F:→ CindyLinz:是正规表示法啊.. 反正就是字串处理嘛 ^^| 01/29 23:18
4F:推 paulpu:喔~ print"\n",$a+=$_ for grep/\d+/,split/ +/,<STDIN>; 01/30 01:01
5F:推 oxoxoxox:print $_=join('+',grep(/^\d+$/,@ARGV)),"=",eval,"\n"; 01/31 22:43