在 C 中比较字符串的最快方法
Fastest way of comparing strings in C
我想知道在 C 中是否有比使用 strcmp()
更快的比较字符串的方法,尤其是当我必须在 switch 中比较一个字符串与多个预定义字符串时声明 时尚。在我的应用程序中,要比较的字符串有时可以达到 1000 个字符,所以我只是在想 strcmp()
是否足够,或者是否存在我不熟悉的更好、更有效的方法。我实际上正在从事一个低功耗嵌入式物联网项目,其中更多 CPU 周期耗电。
听起来问题似乎与 strcmp
本身无关,而与您如何使用它有关。
将字符串与 table 预定义字符串进行比较的最快方法是确保字符串按字母顺序排序,然后使用二进制搜索。其中 strcmp
作为比较函数。 C 标准 bsearch
在嵌入式系统上可能可行也可能不可行。否则,自己实现起来相当简单。
也就是说,除非字符串的数量很大。然后在某些时候,某种形式的散列 table 将比搜索执行得更好。要给出最佳效果的确切答案,需要数据的所有详细信息。
对于固定长度的字符串,您可以通过使用 memcmp
来稍微提高性能 - 这样您就不必检查空终止。但这确实是一个微优化。
我想知道在 C 中是否有比使用 strcmp()
更快的比较字符串的方法,尤其是当我必须在 switch 中比较一个字符串与多个预定义字符串时声明 时尚。在我的应用程序中,要比较的字符串有时可以达到 1000 个字符,所以我只是在想 strcmp()
是否足够,或者是否存在我不熟悉的更好、更有效的方法。我实际上正在从事一个低功耗嵌入式物联网项目,其中更多 CPU 周期耗电。
听起来问题似乎与 strcmp
本身无关,而与您如何使用它有关。
将字符串与 table 预定义字符串进行比较的最快方法是确保字符串按字母顺序排序,然后使用二进制搜索。其中 strcmp
作为比较函数。 C 标准 bsearch
在嵌入式系统上可能可行也可能不可行。否则,自己实现起来相当简单。
也就是说,除非字符串的数量很大。然后在某些时候,某种形式的散列 table 将比搜索执行得更好。要给出最佳效果的确切答案,需要数据的所有详细信息。
对于固定长度的字符串,您可以通过使用 memcmp
来稍微提高性能 - 这样您就不必检查空终止。但这确实是一个微优化。