我有一个这样的字符串:
I am down in the town seeing a crown="larry" with a cherry="red"
我想写一个程序,询问用户她想要什么。如果她要求应该将“拉里”作为冠和“红色”樱桃的字符串,我需要返回字符串。
好的,我在这里简化了问题。可能有很多这样的字符串,我需要解析它们并返回所有匹配项。
问题:执行regexec和regcomp是更有效还是分解字符串并执行strncmp?
PS:似乎regexec需要在内部进行某种比较,而这些比较本来是非常有效的。
答案 0 :(得分:1)
我认为strncmp()
只是工作的错误工具;如果您说strstr()
,可能还有讨论的余地。你不能轻易使用strncmp()
,因为你必须找到一个位置来开始比较。
如果您使用strstr()
,则需要查找字符串,例如:
crown="larry"
cherry="red"
如果使用正则表达式,则必须编译它并运行它。如果要搜索这两个字符串,则有两个正则表达式,除非您要编写扭曲的正则表达式。我认为,对于简单的比较,你需要两个上面的字符串,你可能会发现strstr()
的两个用法比一个或两个正则表达式快。
但值得衡量的是差异。这可能取决于strstr()
的实施;有些非常好。因此,在您关注的平台上运行测量,并选择哪种更适合您。
答案 1 :(得分:0)
由于您每次执行regexec()
时可能正在编译新的正则表达式,因此可能比使用strncmp()
检查关键字要慢一些,例如: “crown =”然后检查值是否为“\”拉里\“”。
我假设您可以构建一个预先解析关键字和值的系统,并保留某种列表,字典或某些指向字符串的内容,反之亦然(每个字符串都与一组keyword =“value”相关联)组合)。这可以做一次,并使搜索过程中的工作更容易。
但我不了解你的目标和你现有的代码,知道这对你的情况是否有意义。
换句话说,您必须对此进行分析才能确定,但我认为strncmp()
比regcomp()
和regexec()
组合更具效果。当然,正则表达式更灵活,但我认为你不需要这样。
<强>加成强>
假设'='不是经常在你的行中找到的字符,你当然可以使用strchr()
来查找字符串中每次出现的'=',然后检查下一个字符是'\''。然后你可以向后扫描以查看密钥是否匹配。strchr()
很可能比strncmp()
快得多。