作者saka12 (saka)
看板Perl
标题Re: [问题] 如何取出字串中的数字并加以运算
时间Mon Jan 30 15:49:15 2012
※ 引述《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
1F:→ xatier:考虑一下在数字语境时英文字母会变成什麽 01/30 16:08
2F:推 erastone:在elsif里判断$partialSum的range(1-30),sum=0无效运算 01/30 19:24
3F:推 paulpu:喔~print"\n",(/\d+/)?$a+=$_:$_ for split/ +/,<STDIN>; 02/01 16:05