作者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
推 imce:用=~應該算用到"正規表示法"了吧 01/29 18:56
推 abliou:這方法挺厲害的!! 01/29 21:46
→ CindyLinz:是正規表示法啊.. 反正就是字串處理嘛 ^^| 01/29 23:18
推 paulpu:喔~ print"\n",$a+=$_ for grep/\d+/,split/ +/,<STDIN>; 01/30 01:01
推 oxoxoxox:print $_=join('+',grep(/^\d+$/,@ARGV)),"=",eval,"\n"; 01/31 22:43