有人能解释一下为什么我应该使用strstr或string find()吗?哪一个更快,在哪里?
在C++中应该使用std::string::find(),在C中应该使用strstr()。性能上的差异不应该很大。
哪个更快并不重要。更重要的是std::string::find是安全的。因此,如果要使用c++,请使用std::string类,并避免使用旧的c函数。
我已经对字符串中搜索子字符串的几个版本进行了基准测试。
标准为c++20/-O3的GCC 10.3显示以下结果:
- strstr是最快的
- std::string::find慢3倍
- std::搜索速度慢4.5倍
- std::string_view::find慢11倍
Clang 12:
- strstr是最快的
- std::string::find慢3倍
- std::搜索速度慢5.5倍
- std::string_view::find慢8.5倍
因此,如果您确实关心性能,请使用strstr。
比较两个不完成相同任务的函数的性能实际上没有意义:strstr
返回指向子字符串的指针,而find
返回子字符串的位置。
例如,如果您需要提取子字符串:
char* s1 = strstr(SeqInWhichISearch, patternToSearch);
将相当于:
std::string s1 = SeqInWhichISearch.substr(SeqInWhichISearch.find(patternToSearch));
正如您所看到的,strstr
被substr
+find
所取代。。