0

我有一个这样的字符串:

I am down in the town seeing a crown="larry" with a cherry="red"

我想编写一个程序来询问用户她想要什么。如果她请求应该有“larry”作为皇冠和“red”樱桃的字符串,我需要返回字符串。

好的,我在这里简化了问题。可能有很多这样的字符串,我需要解析它们并返回所有匹配项。

问题:执行 regexec 和 regcomp 更有效还是分解字符串并执行 strncmp?

PS:似乎 regexec 需要在内部进行某种比较,并且这些比较被设计得非常高效。

4

2 回答 2

1

我认为strncmp()这只是工作的错误工具;如果你说strstr(),可能还有讨论的余地。你不能strncmp()轻易使用,因为你必须找到一个开始比较的位置。

如果您使用strstr(),您将寻找以下字符串:

crown="larry"
cherry="red"

如果您使用正则表达式,则必须编译并运行它。如果您正在搜索这两个字符串,则您有两个正则表达式,除非您想编写一个扭曲的正则表达式。我认为,对于需要按任一顺序使用上述两个字符串的简单比较,您可能会发现strstr()比一个或两个正则表达式更快的两种用法。

不过,值得衡量差异。它可能取决于strstr(); 有些非常好。因此,在您关注的平台上运行测量,并选择更适合您的平台。

于 2011-07-24T23:35:44.120 回答
0

由于您可能每次执行 a 时都在编译一个新的正则表达式regexec(),这可能会比使用strncmp()检查关键字慢一些,例如 "crown=" 然后检查值是否为 "\"larry\"" .

我假设您可以构建一个系统,预先解析关键字和值,并保留某种列表、字典或指向字符串的某些类型,反之亦然(每个字符串都与一组关键字 =“值”组合相关联)。这可以完成一次,并且会使搜索过程中的工作更容易。

但是我对您的目标和现有代码知之甚少,不知道这对您的情况是否有意义。

换句话说,您必须对此进行分析才能确定,但​​我想这strncmp()将比regcomp()andregexec()组合更有效。当然,正则表达式要灵活得多,但我认为您在这里不需要它。

添加

假设 '=' 不是一个在你的行中经常出现的字符,你当然可以使用strchr()查找字符串中每次出现的 '=',然后检查下一个字符是否是 '\"'。然后您可以向后扫描以查看键是否匹配。strchr()很可能比strncmp().快很多

于 2011-07-24T20:52:56.430 回答