如何比较" basic_string#34;使用任意区域设置

时间:2014-04-24 21:30:24

标签: c++

我重新发布了我今天早些时候提交的问题,但我现在引用一个具体的例子来回应我收到的反馈。可以找到原始问题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()没有办法。)

0 个答案:

没有答案