VBA:比较两个字符串逻辑并返回true或false

时间:2014-08-12 17:06:38

标签: string vba logic

我想以特定的方式比较两个字符串。

字符串是由单词,运算符(" +" = AND," /" = OR)和括号组成的逻辑句子。 每个单词都可以是真或假。 句子没有特定的模式 - 可以给出单词和运算符的任何组合

我需要计算出返回true或false的函数,这取决于两个比较的句子是否相同。

让我评估几个例子:

示例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,或者如果句子是单个单词则没有运算符

非常感谢任何提示

1 个答案:

答案 0 :(得分:0)

我在比较功能中做了两步法。首先,我用一个数字替换每个单词。其次,我会评估公式,看看两个输入的结果是否相等。

部分伪代码:

Function compare(s1 As String, s2 As String) As Boolean
    compare = parseAndEvaluate(s1) = parseAndEvaluate(s2)
End Function

Function parseAndEvaluate(str As String) As Long
    ' parse() needs to be implemented
    For Each charOrWord in parse(str)
        Select Case charOrWord
            Case "+", "/", "(", ")":
                parsedStr = parsedStr + charOrWord
            Case Else:
                ' map() needs to be implemented
                parsedStr = parsedStr + map(charOrWord)
        End Select
    Next

    parseAndEvaluate = Application.Evaluate(parsedStr)
End Function

map()函数也可以是某种字典,为新单词分配一个新数字(例如1024,2048,...),并将之前使用的单词映射到先前返回的数字。

parse()函数将读入字符串并在字边界处拆分。

如果您的操作+/比较困难,则需要稍微复杂一点的解析代码,将OR(..., ...)AND(..., ...)写入传递给{的字符串中{1}}。