我重新发布了我今天早些时候提交的问题,但我现在引用一个具体的例子来回应我收到的反馈。可以找到原始问题here(请注意,这不是家庭作业):
我只是想确定C ++是否无法执行basic_string
对象的(有效)大小写不敏感比较,该对象也会影响任意locale
1}}对象。例如,似乎没有可能编写如下的有效函数:
bool AreStringsEqualIgnoreCase(const string &str1, const string &str2, const locale &loc);
根据我目前的理解(但有人可以确认),此函数 为给定的ctype::toupper()
调用collate::compare()
和locale
(已提取)一直使用use_facet()
)。但是,因为collate::compare()
特别需要4个指针args,所以你需要为你需要比较的每个char传递这4个args(在第一次调用ctype::toupper()
之后),或者首先将两个字符串转换为upppercase然后拨打collate::compare()
一个电话。
第一种方法显然效率低(每个测试的char都有4个指针传递),而第二种方法要求你将两个字符串整体转换为大写(需要分配内存和不必要的复制/将两个字符串转换为大写) 。我对此是否正确,即不能有效地做到这一点(因为collate::compare()
没有办法。)