string - 在 Perl 中将 strnig 作为计算器程序的输入
问题描述
我是 Perl 的新手,我正在尝试创建一个简单的计算器程序,但规则与普通数学不同。所有运算都具有相同的功率,数学问题必须从左到右解决。这是一个例子:
123 - 10 + 4 * 10 = ((123 - 10) + 4) * 10 = 1170
8 * 7 / 3 + 2 = ((8 * 7) / 3) + 2 = 20.666
所以在第一种情况下,用户需要输入一个字符串:123 - 10 + 4 * 10。我该如何处理这个任务?如果这是一个笼统的问题,我很抱歉,但我不知道如何开始。我需要柜台吗?像 - 字符串的每个第二个字符是一个运算符,而两侧的两个是数字。
解决方案
恐怕我很懒,所以我会用正则表达式解析并在解析时进行处理。
#!/usr/bin/env perl
#use Data::Dumper;
use Params::Validate (':all');
use 5.01800;
use warnings;
my $string=q{123 - 10 + 4 * 10};
my $result;
sub fee {
my ($a)=validate_pos(@_,{ type=>SCALAR });
#warn Data::Dumper->Dump([\$a],[qw(*a)]),' ';
$result=$a;
};
sub fi {
my ($op,$b)=validate_pos(@_,{ type=>SCALAR},{ type=>SCALAR });
#warn Data::Dumper->Dump([\$op,\$b],[qw(*op *b)]),' ';
$result = $op eq '+' ? $result+$b :
$op eq '-' ? $result-$b :
$op eq '*' ? $result*$b :
$op eq '/' ? $result/$b :
undef;
#warn Data::Dumper->Dump([\$result],[qw(*result)]),' ';
};
$string=~ m{^(\d+)(?{ fee($1) })(?:(?: *([-+/*]) *)(\d+)(?{ fi($2,$3) }))*$};
say $result;
注意 (?{...}) 1的使用
推荐阅读
- python - discord.py FFmpegPCMAudio 在声音文件中间停止播放声音
- python - Python,如果带有变量的语句错误说未定义
- html - 如何使用 VBA 和选择器获取 HTML 中标签的第 n 项以导出到 Excel
- r - 使用cross()在不同尺度上重新编码多个变量
- python - Matplotlib 中的对角线或弯曲错误
- dynamics-crm - 检查 Dynamics 365 CRM 中用户的剩余 API 调用限制
- angular - 我在我的 Angular 项目中找不到 e2e 文件夹
- python - 类型错误:列表索引必须是整数或切片,而不是 st
- node.js - 在 prisma create 上自动添加 UUID 关系
- c - 当用户输入新数据时,如何确保我的数据不会被覆盖?[C 结构和文件]