【发布时间】:2014-10-05 20:44:27
【问题描述】:
我想以特定方式比较两个字符串。
字符串是由单词、运算符(“+” = AND、“/” = OR)和括号组成的逻辑语句。 每个词都可以是真或假。 一个句子没有特定的模式 - 可以给出任何单词和运算符的组合
我需要根据两个比较的句子是否相同来计算返回真或假的函数。
让我评估几个例子:
示例 1:
s1 = "A+B+C"
s2 = "A+B+C"
compare(s1, s2) 'will result True
示例 2:
s1 = "A+B+C"
s2 = "A+C+B"
compare(s1, s2) 'will result True
示例 3:
s1 = "(A/B)+C"
s2 = "A/B/C"
compare(s1, s2) 'will result False
示例 4:
s1 = "(A/B)+C"
s2 = "A/(B+C)"
compare(s1, s2) 'will result False
示例 5:
s1 = "(B/A)+(B/C)"
s2 = "(C/B)+(B/A)"
compare(s1, s2) 'will result True
示例 6:
s1 = "A+B"
s2 = "A+W"
compare(s1, s2) 'will result False
示例 7:
s1 = "A/B+C"
s2 = "A/(B+C)"
compare(s1, s2) 'will result False
示例 8:
s1 = "A/B+C"
s2 = "(A/B)+C"
compare(s1, s2) 'will result True
- 现实世界中句子中的单词不是 A、B、C...,而是更像 BRS21A、4FCCS... 可以是实际由 [a-Z 0-9] 组成的任何字符串
- 任何句子都可以包含任何单词的任意组合
- 运算符总是“/”表示 OR 和/或“+”表示 AND,如果句子是单个单词,则没有运算符
非常感谢任何提示
【问题讨论】:
-
这些值
BRS21A, 4FCCS存储在哪里?您打算如何调用该函数?在工作表或 VBA 中?除了Example 5! 之外,数学上的一切都是有意义的 -
它们存储在 vba 变量中,但作为字符串的一部分,而不是作为单个变量,例如“BRS21A/4FCCS”或“BRS21A”或“4FCCS+BRS21A”——只是几个例子。我想在进一步的 VBA 操作中检索函数结果,即 if compare(s1,s2) = True then...
-
听起来你需要实现一个小解析器。如果单词集是固定的,您可以尝试为每个单词分配一个数字并计算等式的结果,例如A = 1024 和 B = 2048,然后通过计算 A + B = 3072 = B + A。理想情况下必须选择这些数字,以便您的 AND/OR 计算影响不同的位。
-
A、B、BRS21A、ANYTHING 只能是 True 或 False。词组不固定。