字符串的平均长度为 4 个字符。我在想从位置 4 开始的二进制搜索可能是最快的。我还认为内联模板化函数可能表现良好。这是在一个非常紧密的循环中完成的,因此性能至关重要。
数据如下:
"1234 "
"ABC "
"A1235 "
"A1235kgo"
最佳答案
char* found = std::find(arr, arr+9, ' ');
请注意,结束迭代器会发出“不匹配”信号:
bool match = (arr+9) != found;
请注意,
- 二分查找不适用,除非你的字符在一些已知的顺序中。
- std::find 是内联的、模板化的,如果您打开优化(例如,
-O3 -march=native
for g++),它将发挥最大作用
编辑 由于您展示了更多代码,我现在意识到您实际上想要检测(子)字符串长度。你可以使用
- std::string::find_first_of
- std::string::find_last_of
- std::string::find
- std::string::rfind 等
当然,这假设您想要将 char[] 转换为 std::string 。实际上,这可能是一个完全有效的想法,因为在几乎所有 C++ 标准库的实现中都可以找到 SSO(小字符串优化)。 (请参阅 Herb Sutter 的 More Exceptional C++ 中的第 13-16 项,或 Scott Meyers 在 Effective STL 中对商业 std::string 实现的讨论)。
关于C++ 在固定大小为 9 的右填充空终止字符数组中查找第一个空格的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043390/