相关疑难解决方法(0)

不区分大小写的std :: string.find()

我正在使用std::stringfind()方法来测试字符串是否是另一个字符串的子字符串.现在我需要不区分大小写的同一件事.对于字符串比较,我总是可以转向,stricmp()但似乎没有stristr().

我找到了各种答案,大多数建议使用Boost哪个不是我的选择.另外,我需要支持std::wstring/ wchar_t.有任何想法吗?

c++ string stl case-insensitive wstring

58
推荐指数
5
解决办法
9万
查看次数

不区分大小写的字符串:: find

是否存在不区分大小写的find()方法std::string

c++

6
推荐指数
2
解决办法
2万
查看次数

如何使用任意语言环境比较"basic_string"

我正在重新发布我今天早些时候提交的一个问题,但我现在引用一个具体的例子来回应我收到的反馈.原始问题可以在这里找到(请注意,这不是一个家庭作业):

我只是想确定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()).

c++

3
推荐指数
1
解决办法
623
查看次数

标签 统计

c++ ×3

case-insensitive ×1

stl ×1

string ×1

wstring ×1