小编Mik*_*keR的帖子

如何使用任意语言环境比较"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++ ×1