C# MFC与C中的字符串排序# 我有一个既使用C语言又使用本地C++的传统应用程序。我需要对两边的字符串进行排序,以便它们的顺序相同。问题是,在.NET端,使用string.Compare会以“特定于区域性”的方式显示,例如,“a_B”排序在“A11”之前,而在MFC中,使用operator
MFC的CString类和C# MFC与C中的字符串排序# 我有一个既使用C语言又使用本地C++的传统应用程序。我需要对两边的字符串进行排序,以便它们的顺序相同。问题是,在.NET端,使用string.Compare会以“特定于区域性”的方式显示,例如,“a_B”排序在“A11”之前,而在MFC中,使用operator,c#,c++,.net,sorting,mfc,C#,C++,.net,Sorting,Mfc,MFC的CString类和CollateNoCase进行特定于区域设置的比较。我还没有测试它们以确保它们匹配.NET排序规则,但是我希望两者都使用相同的Win32函数,在这种情况下它们显然是匹配的。明显的问题:C++排序使用什么?std::sort(或者更好的std::stable_sort)也接受比较函数对象。您可以使用区域设置感知的_wcsicmpiam using CString operator > EdthCudier-Gealman的排序顺序相同:在猜测中,您可能还没有告诉C++您想
CollateNoCase
进行特定于区域设置的比较。我还没有测试它们以确保它们匹配.NET排序规则,但是我希望两者都使用相同的Win32函数,在这种情况下它们显然是匹配的。明显的问题:C++排序使用什么?std::sort(或者更好的std::stable_sort)也接受比较函数对象。您可以使用区域设置感知的_wcsicmpiam using CString operator<(它使用_mbscmp
)编写自己的代码,然后不要使用它,而是使用区域设置感知的比较函数@AdrianoRepetti-这就是我要寻找的-一个与.NET端匹配的比较函数。谢谢谢谢输入,但是排序与“代码> > EdthCudier-Gealman的排序顺序相同:在猜测中,您可能还没有告诉C++您想使用的区域。默认情况下,它将使用“C”语言环境,该语言环境基本上没有本地化。我的即时反应是尝试类似于setlocale(LC\u COLLATE,“”)的东西代码>在程序启动后立即启动(或者指定一个区域名称,而不是像空字符串指定的那样使用用户的默认区域设置)。回答得好-我实际上能够使用类似的东西,通过使用\u stricoll\u l
和使用\u create\u locale>创建的区域设置来减少对整个程序的干扰(LC_COLLATE,“”;
使用您建议的参数。谢谢!COLLATE
和strcoll
与CompareStringEx
不同。例如,您需要CompareStringEx
在资源管理器中复制排序顺序。此外CompareStringEx
在ANSI中不可用。