我支持使用 Borland C++ Builder 5.02(从 1997 年开始)编写的 C++ 应用程序。 Borland 字符串类上的 find() 方法的行为与我预期的不同:#include <cstring>#include <iostream>int main (int argc, char *argv[]){ string needle = "length == eighteen"; string haystack = "<" + needle + ">"; if (haystack.find(needle) != NPOS) cout << "Found it!" << endl; else cout << "Not found" << endl; return 0;}该程序输出 Not found 。如果我将针改为较短的针,它会输出 Found it! 。如果我将尖括号换成其他一些字符,它会找到它。空格有效,但括号也无效。请注意,我在这里使用的是 Borland 字符串库:如果我使用 #include <string> 并使用 std::string,那么它的工作方式正是我所期望的。遗憾的是,将整个应用程序更改为使用 STL 字符串并不是一个可行的答案!从文档看来,Borland 使用基于哈希的算法进行字符串搜索。我找不到有关此的更多详细信息,并且我已经逐步完成了拆卸,但并不聪明。我发现很难相信这真的是字符串库中的一个错误,特别是因为如果是这样的话,我希望能够找到一篇文章或关于它的东西。我找不到任何此类信息。但是,我已经没有想法了!这是一个已知的错误?有解决办法吗?编辑:再次查看反汇编后,我认为它正在尝试执行类似于 Rabin-Karp 算法的操作,其中哈希函数的计算模数为 33554393(最大素数 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我发现 1998 年的引用资料表明 Borland 的搜索字符串实现有一个错误: https://groups.google.com/forum/?fromgroups=#!searchin/borland.public.cpp.language/cstring $20bug/borland.public.cpp.language/XBzjaJmCYpk/gtMPm-j8jugJ此外,似乎在历史的某个时刻,C++ 委员会决定字符串类将成为标准 C++ 的一部分,而 cstring 的字符串类是这样的残余: https://groups.google.com/forum/?fromgroups=#!searchin/borland.public.cpp.language/borland $20cstring/borland.public.cpp.language/2psY2seRmS4/ywVrqwU1C2wJ关于c++ - Borland 字符串::查找错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15988512/ (adsbygoogle = window.adsbygoogle || []).push({}); 10-10 03:51