不区分大小写的部分匹配两个字符串的问题?

时间:2013-02-11 19:49:38

标签: c++ string

我试图在没有区分大小写的情况下部分匹配两个字符串。我不想使用boost库,因为大多数人都没有在他们的编译器上使用它们。我尝试了标准c ++库中的.find(),但它只检查用户输入的字符串是否在已经存在的字符串的第一个字中。比如,如果我有一个名为Harry_Potter_Goblet的DVD,如果我搜索“goblet”或“Goblet”,程序就不会显示Harry_Potter_Goblet,只有当我对“Harry”进行区分大小写搜索时,结果显示匹配。我在这做错了什么?这是我的代码。

1 个答案:

答案 0 :(得分:3)

定义不区分大小写的字符比较函数:

#include <cctype>
bool case_insensitive_comp(char lhs, char rhs)
{
  return std::toupper(lhs) == std::toupper(rhs);
}

然后,使用std::search在较大的字符串中查找子字符串。

#include <algorithm>
....
std::string s1="Harry_Potter_Goblet";
std::string s2 = "goblet";
bool found = std::search(s1.begin(), s1.end(), s2.begin(), s2.end(), case_insensitive_comp) != s1.end();