Re: [問題] 如何取出字串中的數字並加以運算

看板Perl作者 (saka)時間13年前 (2012/01/30 15:49), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串5/9 (看更多)
※ 引述《cutecpu (可愛中央處理器)》之銘言: : ※ 引述《saka12 (saka)》之銘言: : : 大家好,我式perl的新手 : : 請問如果從<STDIN>輸入任意數字或字母, : : 在不使用"陣列"跟"正規表示法"的前提下, : : 怎麼只取數字,並運行基本的運算 : : 例如: : : 使用者輸入: 1 12 3 a 24 e 5 : : 螢幕顯示: 1+12+3+24+5=45 : : 我本來用substr來取單一字元,可是這樣12會被拆成1跟2, : : 我卡這裡很久了,實在想不出來,所以請大家幫幫忙 : : 謝謝D : 以下是土法煉鋼法,沒有用到陣列跟正規表示式唷: : #!/usr/bin/perl -w : $partialSum = $sum = 0; : $expr = <STDIN>; : for(split('',$expr)){ : if($_ ge '0' and $_ le '9'){ : $partialSum = 10 * $partialSum + $_; : $digit = 1; : } : elsif($digit){ : $exp .= "$partialSum+"; : $sum += $partialSum; : $partialSum = $digit = 0; : } : } : chop($exp); : print "$exp=$sum\n"; 首先先謝謝大家的幫忙,小弟我致上萬分感激! 其實我後來也有想過要用10*1+2的方法來解決12會被拆成1跟2的問題, 無奈小弟我實在太弱,寫不出來orz 我還有一個問題,如果限制使用者只能輸入1~30的數字,之後的數字將不被運算的話, 該怎麼做了? 如果使用者只輸入字母,那我要如何print出"無效運算"呢? 例如: 1 2 12 a 15 b 31 -> 1+2+12+15=30 a b c d -> 無效運算 先再次謝謝大家的幫忙! 我會先用2-3天的時間來想想的,再回頭看看大家的idea的 (沒辦法,我是新手,要多翻書,才得靈感) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.130.53.186

01/30 16:08, , 1F
考慮一下在數字語境時英文字母會變成什麼
01/30 16:08, 1F

01/30 19:24, , 2F
在elsif裡判斷$partialSum的range(1-30),sum=0無效運算
01/30 19:24, 2F

02/01 16:05, , 3F
喔~print"\n",(/\d+/)?$a+=$_:$_ for split/ +/,<STDIN>;
02/01 16:05, 3F
文章代碼(AID): #1F9ajz7h (Perl)
討論串 (同標題文章)
文章代碼(AID): #1F9ajz7h (Perl)