我正在使用std::string的find()方法来测试字符串是否是另一个字符串的子字符串.现在我需要不区分大小写的同一件事.对于字符串比较,我总是可以转向,stricmp()但似乎没有stristr().
我找到了各种答案,大多数建议使用Boost哪个不是我的选择.另外,我需要支持std::wstring/ wchar_t.有任何想法吗?
我正在重新发布我今天早些时候提交的一个问题,但我现在引用一个具体的例子来回应我收到的反馈.原始问题可以在这里找到(请注意,这不是一个家庭作业):
我只是想确定C++是否使得无法对一个对象进行(高效)案例不敏感的比较,而该basic_string对象也会影响任意locale对象.例如,似乎不可能编写一个有效的函数,如下所示:
bool AreStringsEqualIgnoreCase(const string &str1, const string &str2, const locale &loc);
Run Code Online (Sandbox Code Playgroud)
基于我目前的理解(但有人可以证实这一点),这个函数必须调用两个ctype::toupper()和collate::compare()给定的locale(一如既往地提取use_facet()).但是,因为collate::compare()特别需要4个指针args,你需要为你需要比较的每个char传递这4个args(在第一次调用之后ctype::toupper()),或者首先将两个字符串转换为upppercase,然后再调用一次collate::compare().
第一种方法显然是低效的(每个测试的char都有4个指针传递),而第二种方法要求你将两个字符串整体转换为大写(需要分配内存和不必要的复制/将两个字符串转换为大写).我对此是正确的,即,不可能有效地做到这一点(因为没有办法collate::compare()).