字符串匹配 - 概念检查

时间:2012-07-26 17:31:58

标签: c++ token string-matching extended-ascii

这个问题适用于概念检查。我有一个字符串000.00-010.0.0.0,我想从列表{000.00-012.0.0.0和000.00-008.0.0.0}找到最接近的匹配(包括编辑措施的数字距离测量)我是喜欢把'012','010'和'008'作为代币并测量它们之间的距离。

字符串匹配的标准方法将查找每个字符位置的变化,对变化求和并返回距离。修改的距离也将测量CHARS之间的ASCII距离 - G远离E而不是D.

要测量'012'为'010'为'008',需要将三个字符捆绑​​成一个标记。编辑距离和距离是否可以轻松测量此标记?通过删除树数据库中的分隔符,问题似乎更加复杂。

我提出的解决方案我希望实现检查是将'012','010'和'008'转换为单个CHAR ASCII符号,比如说,*,和+,测量字符距离和字符串编辑距离,然后打印转换回'012','010'和'008'。

示例字符串:MER99.C0.00M.14.006.00.060.350

并且,有通配符:

  • MER99.*.006.00.060.350
  • MER99.C0.00M.??.006.00.060.350

由于字符串长度相同(有些长度需要虚拟字符,'00M'实际上是'M'),因此与汉明距离匹配。

我不需要帮助匹配算法,汉明距离法,通配符或虚拟字符,我在问题的上下文中添加了这个。现在,我将令牌视为单独的char并获得良好的结果,但是知道它们不像处理为令牌那样精确。限制因素可能是编码模式中的不一致。但是,我希望将其作为限制,而不是我的算法。

1 个答案:

答案 0 :(得分:1)

您的字符串包含字母数字字符,即基数36。此外,这些字符分组在“标记”中。它无法存储在char中,但您可以将其存储在int中。

您可以存储一对,而不是在树中存储整数,其中char表示值的类型:

  • 0获取数值
  • {li> 1 *
  • 2代表xxxx?(面具)
  • 等...