我该如何找到几个可能字符的索引?

时间:2012-04-19 14:28:35

标签: linux perl

我意识到问题名称并没有真正说明,但我不知道如何解释它,所以这是长版本。

首先,这是我目前的代码:

#! /usr/bin/perl

use strict;
use warnings;

my $input;
while (<>) {
        $input .= $_;
}
$input =~ s/ |\n//g;

print "\n";

我想做的是制作一个计算器,例如当用户执行echo "8 * 5 + 21-15" | calculate时,它会正确计算。所以这是我的思想进步。首先,我将字符串作为一个整体并删除所有空格字符。然后我想索引()它出现*,+,/或 - 。然后我想在任何这些运算符之前将所有字符添加到字符串然后(int)字符串,然后对运算符之后的部分执行相同操作,然后在它们之间执行操作。但我实际上并没有太多关于如何做到这一点的线索。另外,我对Perl很新(3天经验)所以如果可能的话,请慢慢对我说。

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您接受计算器无法处理括号,请使用正则表达式为您解析字符串:

#!/usr/bin/env perl
use strict;
use warnings;

my @tokens = <STDIN> =~ /(\d+|\+|-|\*|\/)/g;
print "$_\n" for @tokens;

这将为您提供一系列可以处理的令牌,所以

echo "8 * 5 + 21-15" | script.pl

将打印

8
*
5
+
21
-
15

现在由你来编写一些能够在令牌上进行正确计算的代码。如果你不尝试解析parens,这并不难,但如果你这样做,你需要编写一个递归解析器,这要困难得多。