gpt4 book ai didi

c++ - 使用特殊(德语)字符对 char * 进行排序?

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:11 29 4
gpt4 key购买 nike

我遇到的问题是我需要对一大堆 char 指针进行排序,但它们有特殊字符。我设法得到了这样的排序过程:

std::sort(dict_.begin(), dict_.end(), comp);

bool comp(NumPair& a, NumPair& b)
{
return boost::lexicographic_compare(a.pFirst, b.pFirst);
}

这很好用,除了所有特殊的德语字符都排在所有其他字符之前。然而,我的老师(是的,这与家庭作业有关)希望在最后对它们进行分类。太棒了!

所以我一直在玩,我想我可以使用我在网站上看到的一个技巧来使区域设置能够包含像这样的特殊字符

return boost::lexicographic_compare(a.pFirst, b.pFirst, locale("german"));

没用!所以:

bool comp()
{
setlocale(LC_ALL, "");
return boost::lexicographic_compare(a.pFirst, b.pFirst);
}

没用!

如果你有它们,我很想听听其他一些可能实际可行的想法。

更新:

根据要求,一些示例输入和输出:

// Some entries
dict_.push_back( NumPair ( "öffnen", "to open" ) );
dict_.push_back( NumPair ( "überraschen", "to surprise" ) );
dict_.push_back( NumPair ( "wünschen", "to wish, to desire, to want" ) );
dict_.push_back( NumPair ( "widersprechen", "to contradict_" ) );

// NumPair ctor.
NumPair( const char *pFirst, const char *pSecond )
{
/* Deep copy of pFirst and pSecond */
}

结果输出:

öffnen
überraschen
wünschen
widersprechen

最佳答案

您可能想要显示更多您的代码,例如您正在使用的导致此问题的确切字符串。我很容易就能对一组德语单词进行排序,任何以非 ASCII 特殊德语字符开头的单词都排在最后。即使没有任何特殊的德语区域设置也会发生这种情况,因为在 Unicode 中,非 ASCII 字符的代码点值高于 ASCII 字符。

例如:

setlocale(LC_ALL, "");

std::vector<std::wstring> vec;
vec.push_back(L"Hallo");
vec.push_back(L"Morgen");
vec.push_back(L"Zebra");
vec.push_back(L"Abend");
vec.push_back(L"Übertragens");
vec.push_back(L"Buchen");

std::sort(vec.begin(), vec.end());
for (std::vector<std::wstring>::iterator it = vec.begin(); it != vec.end(); ++it)
std::wcout << *it << std::endl;

这个输出:

Abend
Buchen
Hallo
Morgen
Zebra
Übertragens

请注意 字符串的使用。由于词典比较例程逐个字符地进行比较,因此您需要使用宽字符,否则比较函数最终将逐个字节而不是逐个字符地比较字符串。这将导致无效比较,因为并非每个 Unicode 字符都可以存储在一个字节中。例如,特殊的德语字符在 UTF-8 中占 2 个字节,因此您需要一种能够在单个元素中包含 0x00 到 0xFFFF 范围的数据类型。在大多数平台上,wchar_t 就足够了。

(另请注意,在源代码中包含非 ASCII 字符不是一个好的做法。请改用“通用字符代码”。为了清楚起见,我只是在此处使用非 ASCII 源代码。)

关于c++ - 使用特殊(德语)字符对 char * 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064984/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com